home *** CD-ROM | disk | FTP | other *** search
/ Acorn Risc Technologies StrongARM CD-ROM / Acorn Risc Technologies StrongARM CD-ROM.iso / software / apps / powerbase / !Powerbase / !RunImage (.txt) < prev    next >
Encoding:
RISC OS BBC BASIC V Source  |  1996-01-11  |  297.3 KB  |  13,705 lines

  1.  ><PBase$Dir>.!RunImage
  2.  !RunImage for !Powerbase database
  3.  D.L. & S.R. Haslam
  4.  Heap Manager (module + BASIC)
  5.  S.R. Haslam
  6.     "version$="6.84b (11-Jan-1995)"
  7.  "OS_Byte",202,0,255 
  8.  ,kbdstatus%
  9.  fatal_err%=255:moan_err%=254
  10. present%=
  11. ,"L0 error: "+
  12. $+" during initialisation at line "+
  13. setup
  14.  buff%>endbuff% 
  15.  0,"No room for defs."
  16.  menu_ptr%>men_end% 
  17.  0,"No room for menus"
  18. wimp_error(
  19.  "OS_GetEnv" 
  20.  ComString$
  21. ComString$,"-database") 
  22. 4  File$=
  23. ComString$,
  24. ComString$,"-database")+10)
  25.  "OS_GSTrans",File$,
  26. 13),255 
  27.  ,File$,L%
  28.   File$=
  29. File$,L%)
  30. get_it_in(File$)
  31. icon_bit(22,passW%,17,
  32. wimp_error(
  33.  quit%
  34. close_down
  35.  "OS_Byte",229,1:
  36.  "OS_Byte",124
  37.  "Wimp_Poll",mask%,block% 
  38.  reason%
  39.  reason% 
  40.  autosave%>0 
  41.  Access%=
  42. check_save(
  43. ($Interval%)*6000)
  44.  Imp_wait% 
  45.  merging% 
  46. start_merge
  47.  flash%>0 
  48. flash(mainW%,field%(flash%))
  49. redraw(!block%)
  50. open_it(!block%)
  51. close_it(!block%)
  52. hourglass(
  53. hourglass(
  54. mouse(block%!0,block%!4,block%!8,block%!12,block%!16)
  55. end_drag(Start%,End%)
  56. process_key
  57. menu_select
  58. set_keyboard(!block%,block%!4)
  59.  17,18:
  60.  "Impulse_Decode",reason%,block%,,,,methodtable%,mytask% 
  61.  reason%,,,,,token%,params%,object%
  62.  reason%>=&200 
  63.  reason% 
  64. 7V      
  65.  &200,&201:
  66.  token%<>-1 
  67. Impulse_command_received(token%,params%,object%)
  68. 8/      
  69.  &202:
  70. Impulse_reply(token%,params%)
  71. 9.      
  72.  &203:
  73. Impulse_send(token%,object%)
  74. :9      
  75.  &204:
  76. Impulse_receive(token%,params%,object%)
  77. ;        
  78. message
  79. not_acknowledged
  80. hourglass(on%)
  81.  (indexing% 
  82.  printing%) 
  83.  !block%=keypadW% 
  84.  on% 
  85.  "Hourglass_On" 
  86.  "Hourglass_Off"
  87. flash(wi%,ic%)
  88.  time%
  89.  "OS_ReadMonotonicTime" 
  90.  time%
  91.  (time% 
  92.  50)=0 
  93. invert(wi%,ic%)
  94.  Shutdown routines ---------------------------------------------------
  95. close_down
  96. #0:$block%="TASK":
  97.  "Wimp_CloseDown",mytask%,!block%:
  98. ,"L0 error: "+
  99. $+" during closedown at line "+
  100.  "Hourglass_Smash"
  101.  "Impulse_CloseDown",mytask%
  102. $block%="TASK"
  103.  "Wimp_CloseDown",mytask%,!block%
  104.  "OS_Byte",202,kbdstatus%
  105.  "Hourglass_Smash"
  106.  present%=7 
  107. check_change
  108.  ramwarn% 
  109.  ram% 
  110. softerror("",63)
  111.  design% 
  112. save_form($database%+".Form")
  113.  altered% 
  114. save_everything:
  115. memory_usage
  116. auto_csv(
  117. close_files
  118. close_log("<Log$Dir>.Log")
  119. hide_windows
  120. delete_icons(mainW%,0)
  121. delete_icons(pselectW%,8)
  122. delete_icons(keypadW%,24)
  123. recover_memory
  124. init_vars
  125. get_preferences(prefsW%,"<Pbase$Dir>.Resources.Preference")
  126. select(prefsW%,36):
  127. deselect(prefsW%,35):
  128. icon_bit(22,prefsW%,35,
  129.  I%=0 
  130.  LastTable%
  131.   printrel$(I%)=""
  132.  tableW%(I%)>0 
  133.  !block%=tableW%(I%):
  134.  "Wimp_DeleteWindow",,block%
  135.   tableW%()=0:TabTitle%()=0
  136. tableW%()=0:TabTitle%()=0
  137. field$()=""
  138. $Password%=""
  139. present%=
  140. exit%=
  141. lit(menu%(0),1,
  142. lit(menu%(0),2,
  143. lit(menu%(0),3,
  144. lit(menu%(2),1,
  145. ):ptr%=menu%(2)+52:ptr%!4=-1
  146. lit(menu%(6),5,
  147. lit(menu%(6),6,
  148. lit(menu%(6),7,
  149. lit(menu%(1),7,
  150.  "OS_CLI","Unset Acl$Dir"
  151.  "OS_CLI","Unset Log$Dir"
  152. $dbase%="No data"
  153. $database%="No data"
  154. redraw_icon(-2,pbaseicon%)
  155. save_everything
  156.  Access% 
  157. save_links
  158. save_calcs
  159. save_subfilenames
  160. save_keys
  161. save_all_tables
  162. save_winpos
  163. refresh_dates
  164.   changed%=
  165. update_calcs(0)
  166. asterisk(
  167. delete_icons(wi%,ic%)
  168. !block%=wi%:block%!4=ic%
  169.  "Wimp_DeleteIcon",,block%
  170.   ic%+=1:block%!4=ic%
  171.  "Wimp_GetIconState",,block%
  172.  ((block%!24) 
  173.  (1<<23))>0
  174. close_files
  175. close_file(lk):link$()=""
  176. close_file(cl):calc$()=""
  177. close_file(dbasehandle%)
  178. close_file(csvhandle%)
  179. close_file(autocsvhandle%)
  180. close_file(texthandle%)
  181. close_file(text%)
  182. close_file(toobighandle%)
  183. close_file(F)
  184. close_file(FH%)
  185. close_file(V)
  186. close_file(
  187.  filehandle%)
  188.  filehandle%>0 
  189. #filehandle%
  190.   filehandle%=0
  191. recover_memory
  192. scrap_sliding_block(headanchor%)
  193. scrap_sliding_block(lineanchor%)
  194. scrap_sliding_block(textanchor%)
  195. scrap_sliding_block(formanchor%)
  196. scrap_sliding_block(selanchor%)
  197. scrap_sliding_block(tempanchor%)
  198. scrap_sliding_block(balanchor%)
  199. scrap_sliding_block(flaganchor%)
  200. scrap_sliding_block(transanchor%)
  201. scrap_sliding_block(sprsanchor%)
  202. scrap_sliding_block(recanchor%)
  203. scrap_sliding_block(saveanchor%)
  204. scrap_sliding_block(logoanchor%)
  205. scrap_sliding_block(fieldmenuanchor%)
  206. scrap_sliding_block(usermenuanchor%)
  207. scrap_sliding_block(tablemenuanchor%)
  208.  I%=0 
  209.  MaxTabs%
  210. scrap_sliding_block(tabanchor%(I%))
  211. scrap_sliding_block(undoanchor%(I%))
  212.  I%=0 
  213.  MaxKeys%+1
  214. scrap_sliding_block(keyanchor%(I%))
  215.  I%=1 
  216.  fields%
  217.  chartype%(I%)=40 
  218. scrap_sliding_block(Rf%(I%))
  219.  Error handling ------------------------------------------------------
  220. wimp_error(return%,err%,erl%,err$)
  221.  type%,result%
  222. close_down:
  223. ,"L0 error: "+
  224. $+" during error handler at line "+
  225.  "Wimp_CommandWindow",-1
  226. block%!0=err%
  227.  return% 
  228.  err%<>fatal_err% 
  229.  err%=moan_err% 
  230. ;      type%=17:
  231.  OK button and no "Error from" in title
  232. )      type%=3:
  233.  OK and Cancel buttons
  234. A      err$+=" @ "+
  235. (erl%)+" (OK to continue, Cancel to quit)"
  236.    type%=2:
  237.  Cancel buttom
  238. ;   err$+=" @ "+
  239. (erl%)+" (Powerbase must quit at once)"
  240. $(block%+4)=err$+
  241.  "Wimp_ReportError",block%,type%,"Powerbase" 
  242.  ,result%
  243.  result=1 means OK selected, 2 means Cancel selected
  244.  result%=2 
  245. close_down
  246. softerror(E$,E%)
  247. M$="Err"+
  248.  E$<>"" 
  249.  M$+=","+E$
  250. $(block%+4)=
  251. msg(M$)
  252. !block%=255
  253.  "Wimp_ReportError",block%,17,"Message from Powerbase"
  254.  ### Use MessageTrans to display a message from the Messages file ###
  255. msg(token$)
  256.  result$,msgparams$,P%,Q%,p%
  257. param$()="":
  258. token$,",")
  259.  P%>0 
  260. "  msgparams$=
  261. token$,P%+1)+","
  262.   token$=
  263. token$,P%-1)
  264.   P%=0
  265.     Q%=P%+1
  266.     P%=
  267. msgparams$,",",Q%)
  268.  P%>0 
  269. *      param$(p%)=
  270. msgparams$,Q%,P%-Q%)
  271.       p%+=1
  272.         
  273.  P%=0
  274.  "MessageTrans_Lookup",filedesc%,token$,msgbuff%,&100,param$(0),param$(1),param$(2),param$(3) 
  275.  ,,result$
  276. =result$
  277. asterisk(on%)
  278.  on% 
  279. :$RecInfo%+=" *":ramwarn%=
  280. $RecInfo%)="*" 
  281.  $RecInfo%=
  282. $RecInfo%))
  283. altered%=on%
  284. E!block%=mainW%:
  285.  "Wimp_GetWindowOutline",,block%:ymax%=block%!16
  286.  "Wimp_GetWindowState",,block%
  287.  "Wimp_ForceRedraw",-1,block%!4,block%!16,block%!12,ymax%
  288.  Program initialisation ----------------------------------------------
  289. setup
  290.  F,A%,I%,J%,V%,valid$
  291. ("<Pbase$Dir>.Resources.Config")
  292. MaxFields%=
  293.  MaxFields%>127 
  294.  fatal_err%,
  295. msg("Err61")
  296. MaxKeys%=
  297. MaxTabs%=
  298. #F)-1
  299. MaxMenus%=
  300. #F)-1
  301. MaxCols%=
  302. #F)-1
  303. $2S$=
  304. #F:P%=
  305. S$," "):leftmenu%=(
  306. S$,P%-1)="YES")
  307. winback%=
  308. uc%=(
  309. #F,3)="YES")
  310. close_file(F)
  311. dim_arrays(MaxFields%+1,MaxKeys%,MaxTabs%,MaxMenus%,MaxCols%)
  312. load_fkeys("Fkeys")
  313. init_vars
  314.  ------------------ Initialise Wimp ----------------------------
  315. $block%="TASK"
  316. mask%=(1<<11)
  317.  "Wimp_Initialise",200,!block%,"Powerbase" 
  318.  version%,mytask%
  319.  version%<316 
  320.  0,"This version of Powerbase is only suitable for RISC OS 3. Contact Powerbase Support for a RISC OS 2-compatible version."
  321.  "Impulse_Initialise",003,mytask%,"Powerbase",-1
  322. 1Mpbaseicon%=
  323. create_icon(-1,0,-16,144,110,&1700312B,"",dbase%,psprite%,10)
  324.  --------- Set up Heap Manager. Load error messages -----------
  325. initheaps(128,128)
  326. 4'f$="<PBase$Dir>.Resources.Messages"
  327.  "MessageTrans_FileInfo",,f$ 
  328.  flags%,,len%
  329. 6'errormsg%=
  330. create_fixed_block(len%)
  331.  "OS_Module",6,,,17+
  332. (f$) 
  333.  ,,filedesc%
  334. $(filedesc%+16)=f$
  335.  "MessageTrans_OpenFile",filedesc%,filedesc%+16,errormsg%
  336. getscreensize(ScreenWidth%,ScreenHeight%,Vpix%)
  337.  Vpix%>=480 
  338.  f$="Sprites22" 
  339.  f$="Sprites"
  340.  "OS_File",5,"<PBase$Dir>.Resources."+f$ 
  341.  ,,,,len%
  342. =(sprites%=
  343. create_fixed_block(len%+4)
  344. !sprites%=len%+4
  345.  "OS_File",255,"<PBase$Dir>.Resources."+f$,sprites%+4
  346. @)headanchor%=
  347. create_anchor("Heading")
  348. A*lineanchor%=
  349. create_anchor("TextLine")
  350. B&textanchor%=
  351. create_anchor("Text")
  352. C&formanchor%=
  353. create_anchor("Form")
  354. D.sprsanchor%=
  355. create_anchor("DbaseSprites")
  356. E&tempanchor%=
  357. create_anchor("Temp")
  358. F(balanchor%=
  359. create_anchor("Balance")
  360. G'flaganchor%=
  361. create_anchor("Flags")
  362. H/transanchor%=
  363. create_anchor("DataTransfer")
  364. I)selanchor%=
  365. create_anchor("PrintSel")
  366. J*recanchor%=
  367. create_anchor("RecordNum")
  368. K,saveanchor%=
  369. create_anchor("SaveBuffer")
  370. L&logoanchor%=
  371. create_anchor("Logo")
  372. M0fieldmenuanchor%=
  373. create_anchor("FieldMenu")
  374. N/usermenuanchor%=
  375. create_anchor("FieldMenu")
  376. O0tablemenuanchor%=
  377. create_anchor("TableMenu")
  378.  I%=0 
  379.  MaxKeys%+1
  380. Q3   keyanchor%(I%)=
  381. create_anchor("Key #"+
  382. (I%))
  383.  I%=0 
  384.  MaxTabs%
  385. T6   tabanchor%(I%)=
  386. create_anchor("VTable #"+
  387. (I%))
  388. U;   undoanchor%(I%)=
  389. create_anchor("UndoVTable #"+
  390. (I%))
  391.  --------------- Read validation strings etc -----------------------
  392. ("<Pbase$Dir>.Resources.ValStrings")
  393. vstrings%=
  394.  vname$(vstrings%),valid%(vstrings%),rvalid%(vstrings%),hvalid%(vstrings%)
  395.  I%=0 
  396.  vstrings%
  397.   vname$(I%)=
  398. #V,4)
  399.   valid$=
  400. (valid$)+1:$V%=valid$:valid%(I%)=V%
  401. (valid$)+1:$V%=valid$:rvalid%(I%)=V%
  402. (valid$)+16:$V%=valid$+";Pptr_hand,12,8":hvalid%(I%)=V%
  403. close_file(V)
  404.  ---------------------------------------------------------------
  405.  Method structure
  406.  PASS=0 
  407. P%=methodtable%
  408.   [OPT PASS
  409.         equd    0
  410. i)        
  411. method(0,1,"GetPathname","")
  412. j'        
  413. method(0,2,"Selection","")
  414. k(        
  415. method(0,3,"ParseQuery","")
  416. l'        
  417. method(0,4,"GetRecord","")
  418. m'        
  419. method(0,5,"PutRecord","")
  420. n(        
  421. method(0,6,"ExpandCode","")
  422. o&        
  423. method(0,7,"GetField","")
  424. p)        
  425. method(0,8,"GetExpanded","")
  426. q'        
  427. method(0,9,"NextMatch","")
  428. r         
  429. method(-1,-1,"","")
  430.  PASS
  431. create_windows
  432. make_menus
  433. get_preferences(prefsW%,"<Pbase$Dir>.Resources.Preference")
  434. select(prefsW%,36):
  435. deselect(prefsW%,35):
  436. icon_bit(22,prefsW%,35,
  437. get_csv_options("<Pbase$Dir>.Resources.CSVoptions")
  438. select(csvW%,19):
  439. deselect(csvW%,18)
  440. scroll_icons(MaxCols%)
  441. usermenu%()=0
  442. method(Flags,Token,Method$,Syntax$)
  443. [OPT PASS
  444.         equd    Flags
  445.         equd    Token
  446.          equs    Method$+
  447.          equs    Syntax$+
  448.         align
  449.     =PASS
  450. dim_arrays(F%,K%,T%,M%,C%)
  451.  desc%(F%),Tag$(F%),field%(F%),F$(F%),Rf%(F%),len%(F%),maxlen%(F%),chartype%(F%),fix%(F%),link$(F%),calc$(F%),Tab%(F%),field$(F%),cfield$(F%),update$(F%)
  452.  Date%(5),Index$(K%+1),KL%(K%+1),KW%(K%+1,3),KF%(K%+1,3),keyfield%(3),key$(K%+1),case%(K%+1),incspace%(K%+1),null%(K%+1),WD%(3),Ext%(10)
  453.  usermenu%(M%,1)
  454.  Label$(10,3)
  455.  Sum(30,5)
  456.  key 256,date% 6,calcrow% F%
  457.  menu%(23),choice$(4)
  458.  table$(T%+1),tableW%(T%),TabTitle%(T%)
  459.  tabfieldlen%(C%),rel%(C%),tabhead$(C%,1)
  460.  fcol%(6),ncol%(6)
  461.  Subfile%(5),filemem%(5)
  462.  buttonfield%(1,23),actionbutt%(5,1),winbuff%(4,1)
  463. MC%=30:
  464.  L%(MC%)
  465.  -------------------- Allocate buffers ------------------------------
  466. (indirectionmem%=&5000:menumem%=&1400
  467.  Mi% 20,Mo% 20
  468.  block% &1C00,paneblock% &600,savebuff% &200,choices% &100,remember% &B00
  469.  buffbase% indirectionmem%:endbuff%=buffbase%+indirectionmem%:buff%=buffbase%
  470.  menblk% menumem%:men_end%=menblk%+menumem%:menu_ptr%=menblk%
  471.  msgbuff% &100,param$(3),att$(3)
  472.  hand% 16:$hand%="Pptr_hand,12,8"
  473.  paint% 8:$paint%="file_ff9"
  474.  writep% 16:$writep%="Pptr_write,4,4"
  475.  writenum% 20:$writenum%="Pptr_write,4,4;A0-9"
  476.  tick% 12:$tick%="Snull,yes"
  477.  dbase% 10:$dbase%="No data"
  478.  psprite% 15:$psprite%="S!Powerbase"
  479.  menspr% 20,mentxt% 1:$menspr%="Sgright,pgright;R5":$mentxt%=""
  480.  winspr% 20,wintxt% 1:$winspr%="R5;Swindow":$wintxt%=""
  481.  methodtable% 256
  482.  ------------- Indirection addresses for Heap Manager ---------------
  483.  keyanchor%(K%+1)
  484.  tabanchor%(T%),undoanchor%(T%)
  485.  printrel$(T%)
  486.  box% 16,box2% 16,matrix% 16,origin% 8
  487. init_vars
  488. caps%=16:filemem%()=-1
  489. !firstsearch%=
  490. :firstfilter%=
  491. 1getrec%=213:ClientSearch$="TRUE":ClientPtr%=0
  492. >Imp_wait%=
  493. :Impref%=-1:merging%=
  494. :mergenum%=0:document$=""
  495. -mergetag%=214:transtag%=215:printtag%=216
  496. 8flash%=
  497. :logosloaded%=
  498. :logging%=
  499. :acl%=
  500. :up_pend%=
  501. Gaccessbutton%=0:stop%=
  502. :customise%=
  503. :tablemenu%=0:undo%=
  504. :filter%=
  505. &displayed%=-1:scratchpad$="":k$=""
  506. ZSearch$="TRUE":Filter$="TRUE":query$="ALL":SearchKey$="":REC%=-1:usekey%=-1:useval$=""
  507. areal$="":visible$="":reform$="":val$="":calcfield%=0:savefunc$="":savetofile%=
  508. :writetable%=
  509. ?password$="":pw%=0:myref%=-1:Type%=0:fieldtype%=1:Length%=0
  510. 3printing%=
  511. :indexing%=
  512. :not%=
  513. :dontincrement%=
  514. $export%=
  515. :csvconv%=
  516. :OLE_edit%=0
  517. 'autosave%=0:autobalance%=
  518. :added%=0
  519. .present%=0:fields%=0:template%=0:adjust%=
  520. (Listed%=
  521. :writingcsv%=
  522. :calcerror%=
  523. lk=0:cl=0:V=0:F=0:FH%=0:dbasehandle%=0:csvhandle%=0:autocsvhandle%=0:texthandle%=0:text%=0:toobighandle%=0:loghandle%=0:handle%=0
  524. $date%=
  525. "movetype%=8:movetype$="Move 
  526. vquit%=
  527. :exit%=
  528. :matching%=
  529. :newrec%=
  530. :val%=
  531. :ram%=
  532. :Access%=
  533. :Modify%=
  534. :ramwarn%=
  535. :altered%=
  536. :design%=
  537. :newtree%=
  538. /LenLine%=0:Count%=0:Start%=0:End%=0:Fptr%=0
  539. <Fieldnumber%=0:Lastwritable%=0:starthere%=-1:calclink%=0
  540. ALastTable%=-1:Tablenumber%=0:TabsLoaded$="Tables":table$()=""
  541. 5Rows%=0:TabFields%=0:Rec%=0:Match_tag%=1:fast%=10
  542. WKeys%=0:keylimit%=1:keylen%=1:LH%=90:addr=-1:file%=0:key%=0:top=8*file%+LH%:RA%=100
  543. +keyfunc$="":fieldfunc$="":Keys%=0:RU%=0
  544. Eprintorder$="":Form$="":ImpCom$="":margin$="":pitch$=
  545. (31)+"9001"
  546. uon$=
  547. (27)+
  548. (%10001000)
  549. 9Filename$="":TextName$="":extrakeys$="":extratabs$=""
  550. 2months$="JanFebMarAprMayJunJulAugSepOctNovDec"
  551.  Window handling -----------------------------------------------------
  552. create_windows
  553.  "Wimp_OpenTemplate",,"<Pbase$Dir>.Resources.Templates"
  554. 'infoW%=
  555. new_window("info",sprites%)
  556. text(infoW%,7)=version$
  557. <keypadW%=
  558. new_window("keypad",sprites%):Title%=block%!72
  559. zsavesubW%=
  560. new_window("savesub",sprites%):SubName%=
  561. text(savesubW%,2):SubSprite%=
  562. val(savesubW%,0):SubTitle%=block%!72
  563. UsaveW%=
  564. new_window("save",1):SaveName%=
  565. text(saveW%,2):SaveSprite%=
  566. val(saveW%,0)
  567. xaccessW%=
  568. new_window("access",sprites%):UserID%=
  569. text(accessW%,0):Password%=
  570. text(accessW%,1):AccessTitle%=block%!72
  571. qpassW%=
  572. new_window("password",sprites%):Read%=
  573. text(passW%,2):Write%=
  574. text(passW%,3):Manager%=
  575. text(passW%,5)
  576. (aclW%=
  577. new_window("aclist",sprites%)
  578. :mainW%=
  579. new_window("main",sprites%):RecInfo%=block%!72
  580. >keyW%=
  581. new_window("keystruc",sprites%):KeyTitle%=block%!72
  582. BchangeW%=
  583. new_window("change",sprites%):ChangeTitle%=block%!72
  584. 'moveW%=
  585. new_window("move",sprites%)
  586. NtabcreateW%=
  587. new_window("tabcreate",sprites%):tabcol%=
  588. text(tabcreateW%,8)
  589. $scrollW%=
  590. new_window("scroll",0)
  591. linkW%=
  592. new_window("link",sprites%):LinkTitle%=block%!72:Tablename%=
  593. text(linkW%,0):fieldnum%=
  594. text(linkW%,2):substitute%=
  595. text(linkW%,10)
  596. VmiscW%=
  597. new_window("misc",sprites%):database%=
  598. text(miscW%,1):$database%="No data"
  599.  ic%=2 
  600. $  Date%(ic%-2)=
  601. text(miscW%,ic%)
  602.  ic%=28 
  603. (  Subfile%(ic%-28)=
  604. text(miscW%,ic%)
  605. Oused%=
  606. text(miscW%,17):filesize%=
  607. text(miscW%,18):percent%=
  608. text(miscW%,14)
  609. )printW%=
  610. new_window("print",sprites%)
  611. ;matchW%=
  612. new_window("match",sprites%):oldquery%=matchW%
  613. 'listW%=
  614. new_window("list",sprites%)
  615. XcreateW%=
  616. new_window("create",sprites%):FtitleText%=block%!72:$FtitleText%="Field 0"
  617. DescText%=
  618. text(createW%,4):TagText%=
  619. text(createW%,5):LenText%=
  620. text(createW%,6):ValText%=
  621. text(createW%,28):InsText%=
  622. text(createW%,26):Fixpt%=
  623. text(createW%,13):$Fixpt%="2"
  624. ;mintext%=
  625. text(createW%,15):maxtext%=
  626. text(createW%,25)
  627. dboxX%=
  628. text(createW%,7):boxY%=
  629. text(createW%,8):boxW%=
  630. text(createW%,9):boxH%=
  631. text(createW%,10)
  632. ArelateW%=
  633. new_window("relation",sprites%):RelTitle%=block%!72
  634. @reformW%=
  635. new_window("reform",sprites%):RefmTitle%=block%!72
  636. &colW%=
  637. new_window("cols",sprites%)
  638. VcalcW%=
  639. new_window("calc",sprites%):CalcForm%=
  640. text(calcW%,0):CalcTitle%=block%!72
  641. )labelW%=
  642. new_window("label",sprites%)
  643. -pselectW%=
  644. new_window("pselect",sprites%)
  645. GmergeW%=
  646. new_window("merge",sprites%):ImpulseApp%=
  647. text(mergeW%,14)
  648. PsizeW%=
  649. new_window("size",sprites%):Records%=
  650. text(sizeW%,1):$Records%="100"
  651. /Increment%=
  652. text(sizeW%,3):$Increment%="25"
  653. =csvW%=
  654. new_window("csvfile",sprites%):CSVTitle%=block%!72
  655. <fkeyW%=
  656. new_window("fkey",sprites%):FkeyTitle%=block%!72
  657. 7Kpadicon%=
  658. val(fkeyW%,0):Fkeyequiv%=
  659. text(fkeyW%,3)
  660. )prefsW%=
  661. new_window("prefs",sprites%)
  662. 7datesep%=
  663. text(prefsW%,1):timesep%=
  664. text(prefsW%,4)
  665. .wc%=
  666. text(prefsW%,7):ws%=
  667. text(prefsW%,10)
  668.  mergewith%=
  669. text(prefsW%,17)
  670. 8Interval%=
  671. text(prefsW%,25):Every%=
  672. text(prefsW%,32)
  673. )queryW%=
  674. new_window("query",sprites%)
  675. Query%=
  676. text(queryW%,0)
  677. 'helpW%=
  678. new_window("help",sprites%)
  679. +filterW%=
  680. new_window("filter",sprites%)
  681. +searchW%=
  682. new_window("search",sprites%)
  683.  "Wimp_CloseTemplate"
  684.     Pactionbutt%()=matchW%,0,mergeW%,6,moveW%,7,changeW%,3,filterW%,0,savesubW%,1
  685. Gwinbuff%()=csvW%,0,passW%,500,labelW%,900,printW%,1150,prefsW%,1900
  686. scroll_icons(rows%)
  687.  I%=0 
  688.  rows%
  689.   iflags%=&0700E735
  690. W  R%=
  691. create_icon(scrollW%,4,-I%*44-52,64,48,iflags%,"",buff%,writenum%,4):buff%+=4
  692.   iflags%=&0700E535
  693. Y  R%=
  694. create_icon(scrollW%,66,-I%*44-52,212,48,iflags%,"",buff%,writep%,13):buff%+=13
  695. #!block%=0:block%!4=-rows%*44-56
  696. block%!8=284:block%!12=0
  697.  "Wimp_SetExtent",scrollW%,block%
  698. new_window(name$,sp%)
  699.  handle%
  700.  "Wimp_LoadTemplate",,block%,buff%,endbuff%,-1,name$,0 
  701.  ,,buff%
  702.  name$="main" 
  703.  block%?35=winback%
  704. block%!64=sp%
  705.  "Wimp_CreateWindow",,block% 
  706.  handle%
  707. =handle%
  708. show_windows
  709. open_window(mainW%)
  710.  (present% 
  711.  7)=7 
  712. selected(passW%,9) 
  713. open_window(keypadW%)
  714.  filemem%(file%)>=0 
  715. selected (prefsW%,43) 
  716. &0    addr=filemem%(file%):
  717. display(key%,addr)
  718. '"    
  719.  addr=
  720. moveto(key%,top,1)
  721.  Listed% 
  722. open_window(listW%)
  723. store_window(wi%,buff%)
  724.  ic%,ptr%
  725. /'!block%=wi%:block%!4=ic%:ptr%=buff%
  726.  "Wimp_GetIconState",,block%
  727.  ((block%!24) 
  728.  (1<<23))=0
  729.   !ptr%=block%!24:ptr%+=4
  730.  ((block%?25) 
  731.  1)>0 
  732.  $ptr%=$
  733. text(wi%,ic%):ptr%+=
  734. ($ptr%)+1
  735. 4%  !block%=wi%:ic%+=1:block%!4=ic%
  736.  "Wimp_GetIconState",,block%
  737. restore_window(wi%,buff%)
  738.  ic%,ptr%
  739. ;'!block%=wi%:block%!4=ic%:ptr%=buff%
  740.  "Wimp_GetIconState",,block%
  741.  ((block%!24) 
  742.  (1<<23))=0
  743. >I  !block%=wi%:block%!4=ic%:block%!8=!ptr%:block%!12=&ffffffff:ptr%+=4
  744.  "Wimp_SetIconState",,block%
  745.  ((block%?25) 
  746.  1)>0 
  747. text(wi%,ic%)=$ptr%:ptr%+=
  748. ($ptr%)+1
  749. A%  !block%=wi%:ic%+=1:block%!4=ic%
  750.  "Wimp_GetIconState",,block%
  751. open_window(wi%)
  752. block%!0=wi%
  753.  "Wimp_GetWindowState",,block%
  754. block%!28=-1
  755. open_it(wi%)
  756. open_it(wi%)
  757.  win%
  758.  wi% 
  759.  tabcreateW%:
  760. update_pane(scrollW%,16,160,284,232,0,0)
  761.  matchW%:
  762. update_pane(queryW%,8,8,466,140,0,0):
  763.  changeW%:
  764. update_pane(queryW%,18,202,466,140,0,0)
  765.  moveW%:
  766. update_pane(queryW%,18,240,466,140,0,0)
  767.  savesubW%:
  768. update_pane(queryW%,10,40,466,140,0,0):
  769. redraw_icon(wi%,0)
  770.  mergeW%:
  771. update_pane(queryW%,24,184,466,140,0,0)
  772.  filterW%:
  773. update_pane(queryW%,8,52,466,140,0,0)
  774.  "Wimp_OpenWindow",,block%
  775.  win%=0 
  776.  winbuff%(win%,0)=wi% 
  777. store_window(wi%,remember%+winbuff%(win%,1))
  778.  win%
  779. close_it(wi%)
  780.  wi% 
  781.  mainW%:
  782. hide_windows:stop%=
  783.  matchW%:matching%=
  784. close_window(queryW%)
  785.  calcW%:calclink%=0
  786.  keyW%:design%=
  787. :newtree%=
  788.  mergeW%:
  789.  "Impulse_SendMessage",&200,":"+$mergewith%+"."+document$+" Edit On",,,,-1,mytask%
  790. f'  merging%=
  791. close_window(queryW%)
  792.  tabcreateW%:
  793. close_window(scrollW%)
  794.  changeW%,moveW%,savesubW%,filterW%:
  795. close_window(queryW%)
  796. close_window(wi%)
  797. hide_windows
  798. close_window(queryW%)
  799. close_window(keypadW%)
  800.  I%=0 
  801.  LastTable%
  802.  tableW%(I%)>0 
  803. close_window(tableW%(I%))
  804. close_window(listW%)
  805. close_window(matchW%)
  806. close_window(relateW%)
  807. close_window(keyW%)
  808. close_window(reformW%)
  809. close_window(calcW%)
  810. close_window(mergeW%)
  811. close_window(csvW%)
  812. close_window(passW%)
  813. close_window(tabcreateW%)
  814. close_window(prefsW%)
  815. close_window(printW%)
  816. close_window(linkW%)
  817. close_window(changeW%)
  818. close_window(savesubW%)
  819. close_window(moveW%)
  820. close_window(searchW%)
  821. close_window(filterW%)
  822. close_window(helpW%)
  823. close_window(mainW%)
  824. filemem%(file%)=addr
  825. close_window(wi%)
  826. !block%=wi%
  827.  "Wimp_CloseWindow",,block%
  828. shut_window(wi%)
  829.  "Wimp_TransferBlock",mytask%,block%,mytask%,paneblock%,88
  830.  wi%=filterW% 
  831. filter_click(filterW%,1,4) 
  832. close_it(wi%)
  833.  "Wimp_TransferBlock",mytask%,paneblock%,mytask%,block%,88
  834. redraw(handle%)
  835. (margin$)
  836. !block%=handle%
  837.  "Wimp_RedrawWindow",,block% 
  838.  more%
  839. get_origin(block%,x0%,y0%)
  840.  more%
  841. draw(x0%,y0%)
  842.  "Wimp_GetRectangle",,block% 
  843.  more%
  844. get_origin(block%,
  845.  x0%,
  846.  y0%)
  847. x0%=block%!4-block%!20
  848. y0%=block%!16-block%!24
  849. draw(x0%,y0%)
  850.  TextPtr%,y1%,y2%,I%,chars%
  851.  handle% 
  852.  listW%
  853.   y1%=-(block%!40-y0%)
  854.   y2%=-(block%!32-y0%)
  855.   y1%=y1% 
  856.  36+1
  857.   y2%=y2% 
  858.  36+1
  859. .  TextPtr%=(!textanchor%)+(y1%-1)*LenLine%
  860.  y2%>Count% 
  861.  y2%=Count%
  862.  I%=y1% 
  863. draw_line(I%)
  864.     TextPtr%+=LenLine%
  865. draw_line(Line%)
  866.  x0%,y0%-(Line%-1)*36-4
  867.  TextPtr%?L%=12 
  868.  "OS_WriteN",TextPtr%,LenLine%
  869. update_pane(wi%,x%,y%,w%,h%,xs%,ys%)
  870. newquery%=!block%
  871.  newquery%<>oldquery% 
  872. shut_window(oldquery%):oldquery%=newquery%
  873. 8!paneblock%=wi%:
  874.  "Wimp_GetWindowState",,paneblock%
  875. paneblock%!4=block%!4+x%
  876. !paneblock%!12=paneblock%!4+w%
  877. paneblock%!16=block%!16-y%
  878. !paneblock%!8=paneblock%!16-h%
  879. 'paneblock%!20=xs%:paneblock%!24=ys%
  880. "paneblock%!28=-1:block%!28=wi%
  881.  "Wimp_OpenWindow",,paneblock%
  882.  "Wimp_OpenWindow",,block%
  883.  up_pend% 
  884.  up_pend%=
  885.  "Wimp_GetWindowState",,block%
  886.  (block%!32 
  887.  (1<<18)) 
  888.  up_pend%=
  889. update_pane(wi%,x%,y%,w%,h%,xs%,ys%)
  890.  Menu handling -------------------------------------------------------
  891. make_menus
  892. menu%(10)=
  893. create_menu(menu_ptr%,280,"Field,Index field...,Analyse months,Global changes...,Link to table...,Combine fields...,Start editing,Remove external,Save contents>"+
  894. (saveW%)+",Undo changes")
  895. Omenic%=menu%(10)+28+(1*24):AnalyseFunc%=menic%!12:menic%!16=-1:menic%!20=14
  896. Lmenic%=menu%(10)+28+(4*24):CalcFunc%=menic%!12:menic%!16=-1:menic%!20=14
  897. emenu%(2)=
  898. create_menu(menu_ptr%,265,"Validation,Create table...,~Display table,Show table files")
  899. Amenu%(5)=
  900. create_menu(menu_ptr%,180,"Name subfile,"+
  901. 20,"0"))
  902. qmenic%=menu%(5)+28:Subfilename%=menic%!12:menic%!16=-1:menic%!20=21:?menic%=?menic% 
  903.  (1<<2):$Subfilename%=""
  904. menu%(7)=
  905. create_menu(menu_ptr%,280,"Misc.,Move/delete...,Set passwords...,Colours!"+
  906. (colW%)+",Edit template,Name subfile>"+
  907. (menu%(5)))
  908. Nmenu%(15)=
  909. create_menu(menu_ptr%,90,"Separator,Comma,TAB,CR,LF,"+
  910. 13,"0"))
  911. lmenic%=menu%(15)+28+(4*24):Delim%=menic%!12:menic%!16=-1:menic%!20=3:?menic%=?menic% 
  912.  (1<<2):$Delim%=""
  913. ]menu%(20)=
  914. create_menu(menu_ptr%,90,"Terminator,CR,LF,LF CR,CR LF,CR CR,LF LF,"+
  915. 13,"0"))
  916. nmenic%=menu%(20)+28+(6*24):Termin%=menic%!12:menic%!16=-1:menic%!20=3:?menic%=?menic% 
  917.  (1<<2):$Termin%=""
  918. string$="Print,Match...,Show resources,Show jobs done,Options...,Save query!"+
  919. (saveW%)+",~Numeric fields>"+
  920. (pselectW%)+",~Save selection!"+
  921. (saveW%)+",~Clear selection"
  922. >menu%(6)=
  923. create_menu(menu_ptr%,260,string$+",Select all")
  924. zstring$="Powerbase,Information!"+
  925. (miscW%)+",Field: ''>"+
  926. (menu%(10))+",Print>"+
  927. (menu%(6))+",Validation>"+
  928. (menu%(2))
  929. string2$=",Current key...,Miscellaneous>"+
  930. (menu%(7))+",Show keypad,~Export selected!"+
  931. (saveW%)+",Export subset...,Export CSV...,CSV options...,Undo changes,Help"
  932. 9menu%(1)=
  933. create_menu(menu_ptr%,248,string$+string2$)
  934. #Fieldpos%=menu%(1)+28+(1*24)+12
  935. Kmenu%(4)=
  936. create_menu(menu_ptr%,200,"Print index,Totals only,Complete")
  937. menu%(3)=
  938. create_menu(menu_ptr%,300,"Utilities,New primary key...,Adjust format,New record format,Merge database,~Change length>"+
  939. (sizeW%)+",Balance index,Print index>"+
  940. (menu%(4))+",Find duplicates")
  941. menu%(0)=
  942. create_menu(menu_ptr%,266,"\Powerbase,_Information>"+
  943. (infoW%)+",New database!"+
  944. (saveW%)+",~Utilities>"+
  945. (menu%(3))+",~Close database,Preferences...,_Help,Quit")
  946. menu%(9)=
  947. create_menu(menu_ptr%,270,"New database,Design field...,~_Default database,~Save form file!"+
  948. (saveW%)+",~Database size>"+
  949. (sizeW%)+",~Primary key...,~Quit design")
  950. menu%(17)=
  951. create_menu(menu_ptr%,240,"Table,Clear,Save!"+
  952. (saveW%)+",Print,"+
  953. 15,"0")+",Undo change,Undo all,Save as CSV!"+
  954. (saveW%)+",Modify")
  955. bmenic%=menu%(17)+28+(3*24):SortTabCol%=menic%!12:menic%!16=-1:menic%!20=14:$SortTabCol%="Sort"
  956. [menu%(18)=
  957. create_menu(menu_ptr%,250,"List,Save as text!"+
  958. (saveW%)+",Sort   '',Scrap")
  959. 'SortTextCol%=menu%(18)+28+(1*24)+12
  960. jmenu%(23)=
  961. create_menu(menu_ptr%,200,"Keystroke,Assign>"+
  962. (fkeyW%)+",Defaults,Save choices,List keys")
  963. menu$="Data"
  964.  I%=0 
  965.   menu$+=","+vname$(I%)
  966. Bmenu%(8)=
  967. create_menu(menu_ptr%,200,menu$):
  968. tick(menu%(8),1,
  969. menu$="External"
  970.  I%=36 
  971.   menu$+=","+vname$(I%)
  972. Dmenu%(11)=
  973. create_menu(menu_ptr%,180,menu$):
  974. tick(menu%(11),0,
  975. menu$="Check box"
  976.  I%=41 
  977.   menu$+=","+vname$(I%)
  978. Dmenu%(14)=
  979. create_menu(menu_ptr%,180,menu$):
  980. tick(menu%(14),0,
  981. menu$="Stamp"
  982.  I%=46 
  983.   menu$+=","+vname$(I%)
  984. Dmenu%(16)=
  985. create_menu(menu_ptr%,250,menu$):
  986. tick(menu%(16),0,
  987. menu$="Button"
  988.  I%=9 
  989.   menu$+=","+vname$(I%)
  990. Dmenu%(19)=
  991. create_menu(menu_ptr%,270,menu$):
  992. tick(menu%(19),0,
  993. ybar%=144+7*44
  994. make_user_menus
  995.  f$,F,items%,longest%,item$,menu$,field%,N%,I%,n$,user_ptr%,blocksize%,forbidden$
  996. wimp_error(
  997. forbidden$=" $&%@\^:.#*|"
  998. extend_named_sliding_block(usermenuanchor%,4)
  999. +user_ptr%=!usermenuanchor%:blocksize%=4
  1000.  field%=1 
  1001.  fields%
  1002.  chartype%(field%)=33 
  1003. C    
  1004.  N%>MaxMenus% 
  1005.  moan_err%,
  1006. msg("Err117,"+
  1007. (MaxMenus%+1))
  1008.     n$=Tag$(field%-1)
  1009.  I%=1 
  1010. #      P%=
  1011. forbidden$,
  1012. n$,I%,1))
  1013. !      
  1014.  P%>0 
  1015. n$,I%,1)="-" 
  1016. #    f$=$database%+"."+n$+"menu"
  1017.     F=
  1018. $    menu$="":longest%=0:items%=0
  1019.  F>0 
  1020.       
  1021.         item$=
  1022. 3        
  1023. (item$)>longest% 
  1024.  longest%=
  1025. (item$)
  1026.         menu$+=item$+","
  1027.         items%+=1
  1028.       
  1029.       
  1030. close_file(F)
  1031.       menu$=
  1032. menu$)
  1033.       
  1034. $}      menu$=Tag$(field%-1)+" menu,Place your,menu choices,in the file,"""+n$+"menu"",which is in,the database,directory,"
  1035. %6      items%=7:longest%=12:P%=1:Q%=1:menu$=
  1036. menu$)
  1037.       F=
  1038.       
  1039.  Q%>0
  1040.         Q%=
  1041. menu$,",",P%)
  1042. )         
  1043. menu$,P%,Q%-P%)
  1044.         P%=Q%+1
  1045.       
  1046.       
  1047. close_file(F)
  1048. -!      
  1049.  "OS_File",18,f$,&fff
  1050. .        
  1051. /     usermenu%(N%,0)=field%-1
  1052. 0     blocksize%+=items%*41+30
  1053. 1?    
  1054. extend_named_sliding_block(usermenuanchor%,blocksize%)
  1055. 2E    usermenu%(N%,1)=
  1056. create_menu(user_ptr%,(longest%+1)*16,menu$)
  1057.     N%+=1
  1058.  field%
  1059. field_menu(N%)
  1060.  F%,P%,L%,D$,F$,icptr%,textptr%
  1061. extend_named_sliding_block(fieldmenuanchor%,N%*41+30)
  1062. <5icptr%=!fieldmenuanchor%:textptr%=icptr%+N%*24+28
  1063. $icptr%="Field list"
  1064. >Zicptr%?12=7:icptr%?13=2:icptr%?14=7:icptr%?15=0:icptr%!16=270:icptr%!20=44:icptr%!24=0
  1065. icptr%+=28
  1066.  F%=1 
  1067. A"  F$=
  1068. (F%):F$=
  1069. (F$)," ")+F$
  1070. B7  D$=
  1071. text(mainW%,desc%(F%)),7):D$+=
  1072. (D$)," ")
  1073. C&  F$+=" "+D$+" "+Tag$(F%):L%=
  1074. D\  !icptr%=0:icptr%!4=-1:icptr%!8=&7000121:icptr%!12=textptr%:icptr%!16=-1:icptr%!20=L%+1
  1075. E!  $textptr%=F$:textptr%+=L%+1
  1076.   icptr%+=24
  1077. icptr%!-24=icptr%!-24 
  1078. =!fieldmenuanchor%
  1079. create_menu(
  1080.  menu%,width%,list$)
  1081.  start%,choice$,entries%,item%,P%,Q%,S%,shaded%
  1082. start%=menu%
  1083. list$,1)="\" 
  1084.  leftmenu%=
  1085.  list$=
  1086. list$,2)
  1087. list$,",")
  1088. $menu%=
  1089. list$,P%-1)
  1090. menu%?12=7:menu%?13=2
  1091. menu%?14=7:menu%?15=0
  1092. S*menu%!16=width%:menu%!20=44:menu%!24=0
  1093. item%=menu%+28
  1094. list$+=","
  1095. entries%=0
  1096.   Q%=P%+1
  1097.   P%=
  1098. list$,",",Q%)
  1099.  P%>0 
  1100.     !item%=0:shaded%=0
  1101. \     choice$=
  1102. list$,Q%,P%-Q%)
  1103. ]?    
  1104. choice$,1)="~" 
  1105.  choice$=
  1106. choice$,2):shaded%=(1<<22)
  1107. ^A    
  1108. choice$,1)="_" 
  1109.  choice$=
  1110. choice$,2):?item%=?item% 
  1111.     S%=
  1112. choice$,"!")
  1113. `5    
  1114.  S%>0 
  1115.  ?item%=?item% 
  1116. choice$,S%,1)=">"
  1117.     S%=
  1118. choice$,">")
  1119.  S%=0 
  1120.       item%!4=-1
  1121.       
  1122. e#      item%!4=
  1123. choice$,S%+1))
  1124. f       choice$=
  1125. choice$,S%-1)
  1126. g        
  1127. (choice$)<=12 
  1128.       $(item%+12)=choice$
  1129.       item%!8=&7000021
  1130.       
  1131.       L%=
  1132. (choice$)+1
  1133. mI      item%!12=buff%:$buff%=choice$:buff%+=L%:item%!16=-1:item%!20=L%
  1134.       item%!8=&7000121
  1135. o        
  1136. p!    item%!8=item%!8 
  1137.  shaded%
  1138.     item%+=24
  1139.     entries%+=1
  1140.  P%=0
  1141. item%!-24=item%!-24 
  1142. menu%=item%
  1143. =start%
  1144. tick(menu%,item%,on%)
  1145. item%=menu%+28+item%*24
  1146.  on% 
  1147. :?item%=?item% 
  1148. :?item%=?item% 
  1149. tick_one(menu%,first%,last%,item%)
  1150.  I%=first% 
  1151.  last%
  1152. tick(menu%,I%,(I%=item%))
  1153. ticked(menu%,item%)
  1154. item%=menu%+28+item%*24
  1155.  (?item% 
  1156. lit(menu%,item%,on%)
  1157. item%=menu%+28+item%*24
  1158.  on% 
  1159. : item%!8=item%!8 
  1160.  (1<<22)
  1161. : item%!8=item%!8 
  1162.  (1<<22)
  1163. lit(menu%,item%)
  1164. item%=menu%+28+item%*24
  1165. =((item%!8 
  1166.  (1<<22))=0)
  1167. show_menu(menu%,x%,y%)
  1168. )menuhandle%=menu%:menux%=x%:menuy%=y%
  1169.  "Wimp_CreateMenu",,menu%,x%,y%
  1170. show_user_menu(datafield%,x%,y%)
  1171.     N%=-1
  1172.   N%+=1
  1173.  usermenu%(N%,0)=datafield% 
  1174.  N%=MaxMenus%
  1175.  usermenu%(N%,0)=datafield% 
  1176. show_menu(usermenu%(N%,1),x%,y%)
  1177. softerror(
  1178. (MaxMenus%+1),117)
  1179.  Icon handling -------------------------------------------------------
  1180. create_icon(whandle%,xmin%,ymin%,width%,height%,iconflags%,text$,d1%,d2%,d3%)
  1181.  handle%
  1182. block%!0=whandle%
  1183. !block%!4=xmin%:block%!8=ymin%
  1184. 2block%!12=xmin%+width%:block%!16=ymin%+height%
  1185. block%!20=iconflags%
  1186.  d1%=0 
  1187.   $(block%+24)=text$
  1188.   block%!24=d1%
  1189.   block%!28=d2%
  1190.   block%!32=d3%
  1191.  "Wimp_CreateIcon",,block% 
  1192.  handle%
  1193. =handle%
  1194. redraw_icon(wi%,ic%)
  1195. !block%=wi%:block%!4=ic%
  1196. block%!8=0:block%!12=0
  1197.  "Wimp_SetIconState",,block%
  1198. *block%!8=0:block%!12=wi%:block%!16=ic%
  1199. icon_bit(bit%,wi%,ic%,on%)
  1200. !block%=wi%
  1201. block%!4=ic%
  1202.  on% 
  1203. :block%!8=0:block%!12=1<<bit%
  1204. :block%!8=1<<bit%:block%!12=1<<bit%
  1205.  "Wimp_SetIconState",,block%
  1206. select(wi%,ic%)
  1207. !block%=wi%:block%!4=ic%
  1208. "block%!8=1<<21:block%!12=1<<21
  1209.  "Wimp_SetIconState",,block%
  1210. deselect(wi%,ic%)
  1211. !block%=wi%:block%!4=ic%
  1212.  block%!8=0:block%!12=(1<<21)
  1213.  "Wimp_SetIconState",,block%
  1214. invert(wi%,ic%)
  1215. !block%=wi%:block%!4=ic%
  1216.  block%!8=(1<<21):block%!12=0
  1217.  "Wimp_SetIconState",,block%
  1218. set_icon(wi%,ic%,on%)
  1219.  on% 
  1220. select(wi%,ic%) 
  1221. deselect(wi%,ic%)
  1222. selected(wi%,ic%)
  1223. !block%=wi%:block%!4=ic%
  1224.  "Wimp_GetIconState",,block%
  1225. =((block%!24) 
  1226.  (1<<21))>0
  1227. shaded(wi%,ic%)
  1228. !block%=wi%:block%!4=ic%
  1229.  "Wimp_GetIconState",,block%
  1230. =((block%!24) 
  1231.  (1<<22))>0
  1232. selected_esg(wi%,esg%)
  1233.  "Wimp_WhichIcon",wi%,block%,&003F0000,&00200000+(esg%<<16)
  1234. =!block%
  1235. next_writable(wi%,ic%,d%,r%,wi2%,ic2%)
  1236.  P%,E%,next%
  1237.  "Wimp_WhichIcon",wi%,block%,&00C0E000,(14<<12)
  1238.   E%+=4
  1239.  block%!E%=-1
  1240.  block%!P%<>ic% 
  1241.  P%<E%
  1242.   P%+=4
  1243.  P%=E% 
  1244.  P%-=4
  1245.  r%=1 
  1246.  P%+4=E% 
  1247.  wi2%=0 
  1248.  r%=1 
  1249.  P%+4=E% 
  1250.  wi%=wi2%:next%=ic2%
  1251.  0:P%=E%
  1252.  2:P%=-4
  1253. :P%+=4*d%
  1254.  wi2%>0 
  1255.  wi%=wi2%:next%=ic2% 
  1256.  next%=!block%
  1257.  wi2%>0 
  1258.  wi%=wi2%:next%=ic2% 
  1259.  next%=block%!(E%-4)
  1260. :next%=block%!P%
  1261. set_caret(wi%,next%)
  1262. text(wi%,ic%)
  1263. !block%=wi%:block%!4=ic%
  1264.  "Wimp_GetIconState",,block%
  1265. =block%!28
  1266. val(wi%,ic%)
  1267. !block%=wi%:block%!4=ic%
  1268.  "Wimp_GetIconState",,block%
  1269. =block%!32
  1270. text_length(wi%,ic%)
  1271. !block%=wi%:block%!4=ic%
  1272.  "Wimp_GetIconState",,block%
  1273. ($(block%!28))
  1274. buffer_length(wi%,ic%)
  1275. !block%=wi%:block%!4=ic%
  1276.  "Wimp_GetIconState",,block%
  1277. =block%!36-1
  1278. set_caret(wi%,ic%)
  1279. 0!block%=wi%:
  1280.  "Wimp_GetWindowState",,block%
  1281.  ((block%?34) 
  1282.  1)=1 
  1283.  ic%=-1 
  1284.  *    
  1285.  "Wimp_SetCaretPosition",wi%,ic%
  1286. !        
  1287. "G    
  1288.  "Wimp_SetCaretPosition",wi%,ic%,0,0,-1,
  1289. text_length(wi%,ic%)
  1290. alter_flags(dfg%,ffg%,bfg%)
  1291.  ic%,F%
  1292. !block%=mainW%
  1293.  ic%=0 
  1294.  fields%*2-1
  1295.   F%=(ic%+1) 
  1296. ,1  block%!4=ic%:
  1297.  "Wimp_GetIconState",,block%
  1298.  (ic% 
  1299.  2)=1 
  1300.  chartype%(F%) 
  1301. /U      
  1302.  0,1,2,3,4,5,6,7,8,40,46,47,48,49,50,51,52,53,54,55,56,57,58:block%!8=ffg%
  1303. 0'      
  1304.  39:block%!8=ffg%:len%(F%)=0
  1305. 1B      
  1306.  logosloaded% 
  1307.  block%!8=&0000611E 
  1308.  block%!8=ffg%
  1309.       
  1310. :block%!8=bfg%
  1311. 3        
  1312.  block%!8=dfg%
  1313.   block%!12=&FFFFFFFF
  1314.  "Wimp_SetIconState",,block%
  1315. limit_actions(off%)
  1316. icon_bit(22,keypadW%,ic%,off%)
  1317.  buttonfield%(0,ic%)>0 
  1318. icon_bit(22,mainW%,field%(buttonfield%(0,ic%)),off%)
  1319.  ic%=-1
  1320. lit(menu%(10),0,off%)
  1321. lit(menu%(10),1,off%)
  1322. lit(menu%(10),2,off%)
  1323.  12,14,15,16,17,18,20,21,22,-1
  1324. identify_field(ic%)
  1325. M.Fieldnumber%=0:Fieldname$="":TextLength%=0
  1326.  (ic% 
  1327.  2)=1 
  1328. O!  !block%=mainW%:block%!4=ic%
  1329.  "Wimp_GetIconState",,block%
  1330.   TextLength%=block%!36-1
  1331.   Fieldnumber%=(ic%+1) 
  1332.  chartype%(Fieldnumber%)<=10 
  1333.  Lastwritable%=Fieldnumber%
  1334. T3  Fieldname$=$
  1335. text(mainW%,desc%(Fieldnumber%))
  1336.  Fieldname$="" 
  1337.  Fieldname$=Tag$(Fieldnumber%)
  1338. selected(prefsW%,21) 
  1339. W$    
  1340.  chartype%(Fieldnumber%) 
  1341. X/      
  1342.  Leave keyboard status unchanged
  1343. Y&      
  1344.  2,4:
  1345.  "OS_Byte",202,0,239
  1346. Z#      
  1347.  "OS_Byte",202,16,111
  1348. [        
  1349.  "OS_Byte",118
  1350. first_field
  1351.  I%+=1
  1352.  (len%(I%)>0 
  1353.  chartype%(I%)<9) 
  1354.  I%>fields%
  1355.  I%>fields% 
  1356.  Mouse_click processing ----------------------------------------------
  1357. mouse(x%,y%,b%,wi%,ic%)
  1358. oldx%=x%:oldy%=y%
  1359. lCblock%!0=x%:block%!4=y%:block%!8=b%:block%!12=wi%:block%!16=ic%
  1360.  T%=0 
  1361.  LastTable%
  1362.  wi%=tableW%(T%) 
  1363.  Tablenumber%=T%
  1364.  wi% 
  1365. iconbar_click
  1366.  accessW%:accessbutton%=ic%
  1367.  aclW%:
  1368.  mainW%:
  1369. main_click(wi%,ic%,b%)
  1370.  keypadW%:
  1371. keypad_click(wi%,ic%,b%)
  1372.  saveW%,savesubW%:
  1373. save_click(wi%,ic%,b%)
  1374.  keyW%:
  1375. key_click(wi%,ic%,b%)
  1376.  tabcreateW%:
  1377. tabcreate_click(wi%,ic%,b%)
  1378.  scrollW%:
  1379. scroll_click
  1380.  linkW%:
  1381. link_to_table
  1382.  passW%:
  1383. passwords(wi%,ic%,b%)
  1384.  printW%:
  1385. print_click(wi%,ic%,b%)
  1386.  matchW%:
  1387. match_click(wi%,ic%,b%)
  1388.  createW%:
  1389. create_click
  1390.  tableW%(Tablenumber%):
  1391. table_click(Tablenumber%)
  1392.  changeW%:
  1393. change_click(wi%,ic%,b%)
  1394.  moveW%:
  1395. move_click(wi%,ic%,b%)
  1396.  listW%:
  1397. list_click(x%,y%,b%,wi%)
  1398.  colW%:
  1399. set_colours(wi%,ic%,b%)
  1400.  calcW%:
  1401. calc_formula($CalcForm%)
  1402.  labelW%:
  1403. label_click(wi%,ic%,b%)
  1404.  mergeW%:
  1405. merge_click
  1406.  sizeW%:
  1407. size_click(wi%,ic%,b%)
  1408.  csvW%:
  1409. csv_click(wi%,ic%,b%)
  1410.  fkeyW%:
  1411. fkey_click(wi%,ic%,b%)
  1412.  prefsW%:
  1413. prefs_click(wi%,ic%,b%)
  1414.  queryW%:
  1415. query_click(wi%,ic%,b%)
  1416.  helpW%:
  1417. help_click(wi%,ic%,b%)
  1418.  reformW%:
  1419. reform_click(wi%,ic%,b%)
  1420.  filterW%:
  1421. filter_click(wi%,ic%,b%)
  1422.  searchW%:
  1423. search_click(wi%,ic%,b%)
  1424.  pselectW%,relateW%,infoW%,miscW%:
  1425.  ### No action on these ###
  1426. special_click
  1427. filter_click(wi%,ic%,b%)
  1428. b%=(b% 
  1429.  %111)
  1430.  ic% 
  1431. C    
  1432.  $Query%<>"" 
  1433.  Filter$=
  1434. parse:addr=
  1435. moveto(key%,top,1)
  1436. deselect(keypadW%,22)
  1437. F    ic%=field%(buttonfield%(0,22)):
  1438.  ic%>0 
  1439. deselect(mainW%,ic%)
  1440. *    
  1441. filter(keypadW%,
  1442. ):Filter$="TRUE"
  1443. 8    
  1444. close_it(wi%):
  1445. set_caret(mainW%,starthere%)
  1446. search_click(wi%,ic%,b%)
  1447.  searchkey%,index$,z%,addr2,oldaddr
  1448. oldaddr=addr
  1449. index$=$
  1450. text(wi%,3)
  1451.  index$<>Index$(searchkey%)
  1452.   searchkey%+=1
  1453. b%=(b% 
  1454.  %111)
  1455.  1,4:
  1456.  b%=4 
  1457.  z%=1 
  1458.  z%=-1
  1459.  ic% 
  1460.      SearchKey$=$
  1461. text(wi%,1)
  1462. #    
  1463.  chartype%(KF%(key%,0)) 
  1464.       
  1465.  5,50,51:
  1466. G      
  1467. check_date(SearchKey$,1,date$)=
  1468. reverse_date(date$)
  1469.         
  1470. @    
  1471.  SearchKey$<>"" 
  1472.  addr=
  1473. find(SearchKey$,searchkey%,1,
  1474.  searchkey%<>key% 
  1475. ,      val$=
  1476. type(key%):kl%=
  1477. (key$(key%))
  1478. *      addr2=
  1479. search(key$(key%),key%,2)
  1480.       
  1481.  addr2<0 
  1482. /        
  1483.  7:flash%=KF%(key%,0):addr=oldaddr
  1484.         
  1485.  addr=addr2
  1486.       
  1487.         
  1488.  b%=4 
  1489. 6      
  1490. close_it(wi%):
  1491. set_caret(mainW%,starthere%)
  1492.       
  1493. set_caret(wi%,1)
  1494.         
  1495. J    
  1496. text(wi%,1)=SearchKey$:
  1497. redraw_icon(wi%,1):
  1498. set_caret(wi%,1)
  1499. 9    
  1500. close_it(wi%):
  1501. set_caret(mainW%,starthere%)
  1502.  11:searchkey%+=z%
  1503.  12:searchkey%-=z%
  1504.  searchkey%>Keys% 
  1505.  searchkey%=0
  1506.  searchkey%<0 
  1507.  searchkey%=Keys%
  1508. text(wi%,3)=Index$(searchkey%):
  1509. redraw_icon(wi%,3)
  1510. reform_click(wi%,ic%,b%)
  1511. text(wi%,7)
  1512. b%=(b% 
  1513.  %111)
  1514.  ic% 
  1515. close_window(wi%)
  1516.  reform$ 
  1517. (    
  1518.  "Merge":
  1519. merge_files(f$,file%)
  1520. "    
  1521.  "Reformat":
  1522. reformat(f$)
  1523.  b%=4 
  1524. close_window(wi%)
  1525. query_click(wi%,ic%,b%)
  1526.  (b% 
  1527.  %111) 
  1528.  1,4:
  1529.  ic% 
  1530. D    
  1531.  2:$Query%=query$:
  1532. redraw_icon(wi%,0):
  1533. set_caret(queryW%,0)
  1534. `    
  1535. position_window(helpW%,x%+64,y%-300,0,0,0,0):
  1536. set_caret(helpW%,6):fieldfunc$="help"
  1537. prefs_click(wi%,ic%,b%)
  1538. b%=(b% 
  1539.  %111)
  1540.  1,4:
  1541.  ic% 
  1542.  27,28,29:
  1543. 0    
  1544. icon_bit(22,wi%,25,
  1545. selected(wi%,29))
  1546. 3    
  1547. icon_bit(22,wi%,32,
  1548. selected(wi%,31))
  1549. Q    
  1550. get_preferences(prefsW%,"<Pbase$Dir>.Resources.Preference"):
  1551. redraw(wi%)
  1552. selected(wi%,35) 
  1553. =      
  1554. save_preferences(prefsW%,$database%+".Preference")
  1555. I      
  1556. save_preferences(prefsW%,"<Pbase$Dir>.Resources.Preference")
  1557.         
  1558. F    
  1559.  b%=4 
  1560. close_window(wi%):
  1561. set_caret(mainW%,starthere%)
  1562. 4    
  1563. restore_window(wi%,remember%+winbuff%(4,1))
  1564. P    
  1565.  b%=4 
  1566. close_window(wi%):
  1567. set_caret(mainW%,starthere%) 
  1568. redraw(wi%)
  1569. )    
  1570. auto_csv(
  1571. selected(wi%,44))
  1572. kill%=
  1573. selected(wi%,12)
  1574. %autosave%=29-
  1575. selected_esg(wi%,2)
  1576. "autobalance%=
  1577. selected(wi%,31)
  1578. icon_bit(22,wi%,32,
  1579. selected(wi%,31))
  1580. set_icon(queryW%,1,
  1581. selected(wi%,30))
  1582. fkey_click(wi%,ic%,b%)
  1583.  z%,K$,K%,Z%
  1584. b%=(b% 
  1585.  %111)
  1586.  1,4:
  1587.  (b% 
  1588.  %111)=4 
  1589.  z%=1 
  1590.  z%=-1
  1591.  ic% 
  1592.  4,5:
  1593. #    K$=$Fkeyequiv%:K%=
  1594. K$,2))
  1595.  ic% 
  1596.       
  1597.  4:K%+=z%
  1598.       
  1599.  5:K%-=z%
  1600.         
  1601.  K%=12 
  1602.  K%=0
  1603.  K%<0 
  1604.  K%=11
  1605. )    
  1606.  K%=0 
  1607.  K$="None" 
  1608.  K$="F"+
  1609. *    $Fkeyequiv%=K$:
  1610. redraw_icon(wi%,3)
  1611. #    K$=$Fkeyequiv%:K%=
  1612. K$,2))
  1613.  K%>0 
  1614.       
  1615.  K%>9 
  1616.  K%+=64
  1617. %      
  1618. selected(wi%,1) 
  1619.  K%+=16
  1620. %      
  1621. selected(wi%,2) 
  1622.  K%+=32
  1623.       K%+=384
  1624. >      Z%=
  1625. key_assigned(K%):
  1626.  Z%<>-1 
  1627.  buttonfield%(1,Z%)=0
  1628.         
  1629. F    buttonfield%(1,kpad%)=K%:
  1630.  kpad%=13 
  1631.  buttonfield%(1,23)=K%+16
  1632.  )    
  1633.  b%=4 
  1634.  "Wimp_CreateMenu",,-1
  1635. !$    
  1636.  "Wimp_CreateMenu",,-1
  1637. change_click(wi%,ic%,b%)
  1638. b%=(b% 
  1639.  %111)
  1640.  ic% 
  1641. +P    
  1642. changes(key%):
  1643.  b%=4 
  1644. close_it(wi%):
  1645. set_caret(mainW%,starthere%)
  1646. ,8    
  1647. close_it(wi%):
  1648. set_caret(mainW%,starthere%)
  1649. move_click(wi%,ic%,b%)
  1650. b%=(b% 
  1651.  %111)
  1652.  ic% 
  1653. 6>    
  1654.  0,1,2:
  1655. icon_bit(22,moveW%,6,
  1656. set_caret(queryW%,0)
  1657. 79    
  1658. icon_bit(22,moveW%,6,
  1659. set_caret(moveW%,6)
  1660. 9&    
  1661.  undo% 
  1662. save_keys:undo%=
  1663. :%    
  1664. move_records(key%,file%,top)
  1665. ;(    
  1666. read(fields%,
  1667. ,REC%,$database%)
  1668. <     addr=
  1669. moveto(key%,top,1)
  1670. =@    
  1671.  b%=4 
  1672. close_it(moveW%):
  1673. set_caret(mainW%,starthere%)
  1674.  undo% 
  1675. @3      
  1676. open_index($database%+".PrimaryKey",0,
  1677. A#      f$=$database%+".Indices."
  1678.       
  1679.  Keys%>0 
  1680.         
  1681.  K%=1 
  1682.  Keys%
  1683. D-          
  1684. open_index(f$+Index$(K%),K%,
  1685.         
  1686.       
  1687.       undo%=
  1688. H        
  1689. I@    
  1690.  b%=4 
  1691. close_it(moveW%):
  1692. set_caret(mainW%,starthere%)
  1693. J<    
  1694. close_it(moveW%):
  1695. set_caret(mainW%,starthere%)
  1696. csv_click(wi%,ic%,b%)
  1697. b%=(b% 
  1698.  %111)
  1699.  2,4:
  1700.  ic% 
  1701. T3    
  1702. show_menu(menu%(15),oldx%+32,oldy%+16)
  1703. U3    
  1704. show_menu(menu%(20),oldx%+32,oldy%+16)
  1705.  1,4:
  1706.  ic% 
  1707. [2    
  1708. icon_bit(22,wi%,4,(
  1709. selected(wi%,1)))
  1710. ]"    
  1711. text(wi%,9)="Import" 
  1712.       
  1713.  csvfunc$ 
  1714. _7        
  1715.  "ImportMain":
  1716. convert_csv($
  1717. text(wi%,13))
  1718. `F        
  1719.  "ImportTable":
  1720. csv_to_table(Tablenumber%,$
  1721. text(wi%,13))
  1722.       
  1723. b        
  1724. c%    
  1725.  b%=4 
  1726. close_window(csvW%)
  1727. dd    
  1728. restore_window(wi%,remember%+winbuff%(0,1)):
  1729.  b%=4 
  1730. close_window(wi%) 
  1731. redraw(wi%)
  1732. selected(wi%,18) 
  1733. g?      
  1734. save_csv_options("<Pbase$Dir>.Resources.CSVoptions")
  1735. h7      
  1736. save_csv_options($database%+".CSVoptions")
  1737. i        
  1738. jA    
  1739. get_csv_options("<Pbase$Dir>.Resources.CSVoptions")
  1740. merge_click
  1741.  merging% 
  1742.  ic%<>6 
  1743.  ic%<>7 
  1744. finished%=
  1745.  (b% 
  1746.  %111)=4 
  1747.  z%=1 
  1748.  z%=-1
  1749.  ic% 
  1750.  3:ClientPtr%=
  1751. merge_next(ClientPtr%,z%)
  1752.  8:ClientPtr%=
  1753. merge_next(ClientPtr%,-z%)
  1754.  10:ClientPtr%=
  1755. merge_next(top,z%)
  1756.  9:ClientPtr%=
  1757. merge_next(top,-z%)
  1758.  "Impulse_SendMessage",&201,":"+$mergewith%+"."+document$+" Print",,,,printtag%,mytask%
  1759.   merging%=
  1760.   $mergewith%=$ImpulseApp%
  1761.  "Impulse_SendMessage",&200,":"+$mergewith%+"."+document$+" Edit Off",,,,-1,mytask%
  1762. ~J  mergenum%=0:$
  1763. text(mergeW%,12)=
  1764. (mergenum%):
  1765. redraw_icon(mergeW%,12)
  1766.   ClientSearch$=
  1767. parse
  1768. #  ClientPtr%=
  1769. merge_next(top,1)
  1770. close_file(dbasehandle%):ClientPtr%=top:
  1771. close_it(mergeW%)
  1772.  "Impulse_SendMessage",&200,":"+$mergewith%+"."+document$+" ClearMerge",,,,-1,mytask%
  1773.  "Impulse_SendMessage",&200,":"+$mergewith%+"."+document$+" Edit On",,,,-1,mytask%
  1774. size_click(wi%,ic%,b%)
  1775.  recs$,int$
  1776. recs$=
  1777. (RA%)
  1778. keybase%=!keyanchor%(0)
  1779.  keybase%!4>0 
  1780.  inc$=
  1781. (keybase%!4) 
  1782.  inc$="0"
  1783. b%=(b% 
  1784.  %111)
  1785.  1,4:
  1786.  ic% 
  1787.       
  1788. ($Records%)<=0:
  1789.       
  1790. softerror("",71)
  1791. 0      $Records%=recs$:
  1792. redraw_icon(sizeW%,1)
  1793.       
  1794. ($Increment%)<0
  1795.       
  1796. softerror("",72)
  1797. 1      $Increment%=inc$:
  1798. redraw_icon(sizeW%,3)
  1799.       
  1800. #      keybase%!4=
  1801. ($Increment%)
  1802. 7      
  1803.  present%=7 
  1804. change_length(
  1805. ($Records%),
  1806. +      
  1807.  b%=4 
  1808.  "Wimp_CreateMenu",,-1
  1809.         
  1810. (    $Records%=recs$:$Increment%=inc$
  1811.      
  1812.  "Wimp_CreateMenu",,-1
  1813. table_click(T%)
  1814.  S$,tablefield%
  1815. `NewTab%=(
  1816. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)="
  1817. *extra%=-NewTab%*(Rows%*(TabFields%+1))
  1818. lit(menu%(17),7,NewTab% 
  1819.  Modify%)
  1820. $menu%(17)=table$(T%)
  1821.  ic%>=0 
  1822. (  tablefield%=(ic% 
  1823.  (TabFields%+1))
  1824.  tablefield%=0
  1825.  2047 
  1826.  ic%<Rows%*(TabFields%+1) 
  1827. %    
  1828.  chartype%(Fieldnumber%)<4 
  1829. (      scratchpad$=$Rf%(Fieldnumber%)
  1830. $      S$=$
  1831. text(tableW%(T%),ic%)
  1832. '      
  1833. (S$)<=len%(Fieldnumber%) 
  1834. !        $Rf%(Fieldnumber%)=S$
  1835. 5        
  1836. redraw_icon(mainW%,field%(Fieldnumber%))
  1837.       
  1838.         
  1839.  1024:
  1840.  ic%<Rows%*(TabFields%+1) 
  1841.  Access%=
  1842. <    !block%=tableW%(T%):
  1843.  "Wimp_GetWindowState",,block%
  1844. Q    
  1845.  "Wimp_SetCaretPosition",tableW%(T%),ic%,x%-block%!4+block%!20,y%,-1,-1
  1846. asterisk(
  1847. '  sort_tabcol%=ic% 
  1848.  (TabFields%+1)
  1849.  sort_tabcol%>=0 
  1850. !    
  1851. lit(menu%(17),3,Access%)
  1852.  NewTab% 
  1853. B      h$=$
  1854. text(tableW%(T%),Rows%*(TabFields%+1)+sort_tabcol%)
  1855. %      $SortTabCol%="Sort "+
  1856. h$,9)
  1857. 7      
  1858.  $SortTabCol%="Sort column "+
  1859. (sort_tabcol%)
  1860.         
  1861. lit(menu%(17),3,
  1862. show_menu(menu%(17),x%-64,y%-20)
  1863.  256:
  1864. invert(wi%,tablefield%+extra%)
  1865. @  field$=
  1866. (tablefield%):
  1867.  tablefield%<10 
  1868.  field$="0"+field$
  1869.   field$+=":"
  1870. selected(wi%,tablefield%+extra%) 
  1871.     printrel$(T%)+=field$
  1872.         
  1873. !    P%=
  1874. printrel$(T%),field$)
  1875. ?    printrel$(T%)=
  1876. printrel$(T%),P%-1)+
  1877. printrel$(T%),P%+3)
  1878. scroll_click
  1879.  (b% 
  1880.  %111)=2 
  1881. row%=(ic% 
  1882. 0$tabcol%=
  1883. (row%):
  1884. redraw_icon(tabcreateW%,8)
  1885. list_click(x%,y%,b%,wi%)
  1886.  N%,last%
  1887.  (b% 
  1888.  %111) 
  1889.   !block%=wi%
  1890.  "Wimp_GetWindowState",,block%
  1891. *  column%=(x%-block%!4+block%!20) 
  1892. (  last%=
  1893. (Form$) 
  1894.  2:sort_textcol%=0
  1895.  last%>0 
  1896.         
  1897.       sort_textcol%+=1
  1898. =    
  1899.  Tab%(sort_textcol%)>column%+1 
  1900.  sort_textcol%=last%
  1901. W    sort_textcol%-=1:$SortTextCol%="Sort "+Tag$(
  1902. ("&"+
  1903. Form$,sort_textcol%*2+1,2)))
  1904. show_menu(menu%(18),x%-64,y%-20)
  1905.   !block%=wi%
  1906.  "Wimp_GetWindowState",,block%
  1907. ,  line%=(block%!16-block%!24-y%+36) 
  1908. *  column%=(x%-block%!4+block%!20) 
  1909.   RecPtr%=!recanchor%
  1910.   R%=RecPtr%!(line%*4)
  1911.   last%=
  1912. (Form$) 
  1913.  R%>=0 
  1914. &    addr=
  1915. find("#"+
  1916. (R%),key%,1,
  1917.  format$ 
  1918.       
  1919.  "horiz","table"
  1920.       
  1921.         N%+=1
  1922. )      
  1923.  Tab%(N%)>column%+1 
  1924.  N%=last%
  1925. $      F%=
  1926. fnum(
  1927. Form$,N%*2-1,2))
  1928.       
  1929.  "vert":
  1930.       
  1931.         N%+=1:line%-=1
  1932. ,      
  1933.  RecPtr%!(line%*4)<>R% 
  1934.  N%=last%
  1935. $      F%=
  1936. fnum(
  1937. Form$,N%*2-1,2))
  1938. "      
  1939.  "tree":F%=KF%(tkey%,0)
  1940.       
  1941.  "dup":F%=KF%(0,0)
  1942.         
  1943.  chartype%(F%)<=10 
  1944. 7      
  1945. set_caret(mainW%,field%(F%)):Fieldnumber%=F%
  1946.     A      
  1947. set_caret(mainW%,starthere%):Fieldnumber%=starthere%
  1948.         
  1949. match_click(wi%,ic%,b%)
  1950.  not%,and%,or%
  1951. b%=(b% 
  1952.  %111)
  1953. selected_esg(printW%,4) 
  1954.  38:reportdest$="Window"
  1955.  39:reportdest$="File"
  1956.  41:reportdest$="Printer"
  1957.  ic% 
  1958. [    
  1959.  2:TextName$=$database%+".PrintJobs."+key$(0):
  1960. do_it("",REC%):$SaveName%=TextName$
  1961. K    
  1962. selected(wi%,4) 
  1963. text(wi%,3)="Found:" 
  1964. text(wi%,3)="Time:"
  1965. redraw_icon(wi%,3)
  1966. 4    
  1967. close_it(wi%):
  1968. set_caret(mainW%,starthere%)
  1969. !$    Search$=
  1970. parse:displayed%=-1
  1971.  Search$<>"FALSE" 
  1972. #B      $Query%="":
  1973. redraw_icon(queryW%,0):
  1974. set_caret(queryW%,0)
  1975. $M      TextName$=$database%+".PrintJobs."+
  1976. query$,10):$SaveName%=TextName$
  1977.       
  1978.  reportdest$ 
  1979. &!        
  1980.  "Window","Printer":
  1981. '&        
  1982. do_it(Search$,displayed%)
  1983.         
  1984.  "File":
  1985. )!        savefunc$="Save list"
  1986. *6        $SaveSprite%="sfile_fff;Pptr_hand,12,8;R2"
  1987. +:        
  1988. position_window(saveW%,x%-138,y%-130,0,0,0,0)
  1989. ,         
  1990. set_caret(saveW%,2)
  1991.       
  1992. .        
  1993. /R    
  1994.  b%=4 
  1995. selected(wi%,4) 
  1996. close_it(wi%):
  1997. set_caret(mainW%,starthere%)
  1998. help_click(wi%,ic%,b%)
  1999. butt%=(b% 
  2000.  %111)
  2001.  butt% 
  2002.  2,4:
  2003. tick_one(fieldmenu%,0,fields%-1,Match_tag%-1)
  2004.  ic%=19 
  2005. show_menu(fieldmenu%,oldx%+32,oldy%+16)
  2006.  butt% 
  2007.  1,4:
  2008.  ic% 
  2009. >W    
  2010.  1:new$="NOT (":$Query%+=new$:
  2011. redraw_icon(queryW%,0):
  2012. set_caret(wi%,6):not%=
  2013. ?P    
  2014.  9:new$=" AND ":$Query%+=new$:
  2015. redraw_icon(queryW%,0):
  2016. set_caret(wi%,6)
  2017. @P    
  2018.  10:new$=" OR ":$Query%+=new$:
  2019. redraw_icon(queryW%,0):
  2020. set_caret(wi%,6)
  2021.  16,17:
  2022. B8    
  2023.  (b% 
  2024.  %111)=4 
  2025.  z%=1 
  2026.  (b% 
  2027.  %111)=1 
  2028.  z%=-1
  2029. C2    
  2030.  ic%=16 
  2031.  Match_tag%+=z% 
  2032.  Match_tag%-=z%
  2033. D+    
  2034.  Match_tag%>fields% 
  2035.  Match_tag%=1
  2036. E+    
  2037.  Match_tag%<1 
  2038.  Match_tag%=fields%
  2039. F:    $
  2040. text(wi%,0)=Tag$(Match_tag%):
  2041. redraw_icon(wi%,0)
  2042. GA    
  2043.  21:$Query%="":
  2044. redraw_icon(queryW%,0):
  2045. set_caret(wi%,6)
  2046. I     op%=
  2047. selected_esg(wi%,1)
  2048.  op% 
  2049.       
  2050.  2:op$="="
  2051.       
  2052.  3:op$="{"
  2053.       
  2054.  4:op$="<"
  2055.       
  2056.  5:op$=">"
  2057.       
  2058.  11:op$="<>"
  2059.       
  2060.  13:op$=">="
  2061.       
  2062.  14:op$="<="
  2063.       
  2064.  15:op$="}{"
  2065. S        
  2066.     tag$=$
  2067. text(wi%,0)
  2068.     contents$=$
  2069. text(wi%,6)
  2070.     new$=tag$+op$+contents$
  2071. WE    $Query%+=new$:
  2072.  not%=
  2073. $Query%)<>")" 
  2074.  $Query%+=")":not%=
  2075. redraw_icon(queryW%,0)
  2076. Y>    $
  2077. text(wi%,6)="":
  2078. redraw_icon(wi%,6):
  2079. set_caret(wi%,6)
  2080. Z4    
  2081. close_it(helpW%):
  2082. set_caret(queryW%,0)
  2083. iconbar_click
  2084.  %111 
  2085. selected(passW%,12) 
  2086. close_window(saveW%)
  2087. d(    
  2088. show_menu(menu%(0),x%-64,ybar%)
  2089.  $dbase%="No data" 
  2090.     $SaveName%="!DataBase"
  2091. i2    $SaveSprite%="snew_appl;Pptr_hand,12,8;R2"
  2092.     savefunc$=choice$(1)
  2093. k1    
  2094.  "Wimp_CreateMenu",,saveW%,x%-50,y%+300
  2095. show_windows
  2096. main_click(wi%,ic%,b%)
  2097.  P%,F%,H$,L%,T%,N$,field$
  2098.  present%=7 
  2099.  adjust%=
  2100. validate(Fieldnumber%,T%,N$)=
  2101.  changed%=
  2102. update_calcs(Fieldnumber%)
  2103.  flash% 
  2104. deselect(wi%,field%(flash%)):flash%=
  2105.  OLE_edit%>0:
  2106. show_text_block(OLE_edit%)
  2107.  OLE_edit%<0:
  2108. show_picture(-OLE_edit%)
  2109.  OLE_edit%<>0 
  2110. redraw_icon(wi%,field%(
  2111. (OLE_edit%))):OLE_edit%=0
  2112.  present% 
  2113.  0,3:
  2114. design_field(b%,ic%,
  2115. first_field>0 
  2116. default_key
  2117. design_field(b%,ic%,
  2118.  5,7:
  2119.  adjust% 
  2120. design_field(b%,ic%,
  2121.         
  2122. identify_field(ic%)
  2123. ,    
  2124. selected(prefsW%,19) 
  2125. relations
  2126.  2047 
  2127.       
  2128. &      
  2129.  chartype%(Fieldnumber%) 
  2130. B        
  2131. show_user_menu(Fieldnumber%-1,oldx%+32,oldy%+16)
  2132. y        
  2133.  9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31:
  2134. fkey_status(chartype%(Fieldnumber%)-9)
  2135.         
  2136. !        
  2137. close_window(saveW%)
  2138. .        
  2139. selected(passW%,11) 
  2140.  Modify% 
  2141.            
  2142. set_up_field_menu
  2143. .          
  2144. show_menu(menu%(1),x%-64,y%-20)
  2145.         
  2146.       
  2147.       
  2148. &      
  2149.  chartype%(Fieldnumber%) 
  2150. J        
  2151.  0,1,2,3,4,5,6,7,8,39,46,47,48,49,50,51,52,53,54,55,56,57,58:
  2152. H        
  2153.  "Wimp_GetCaretPosition",,block%:first%=((block%!4)+2) 
  2154. 0        
  2155. select_range(first%,Fieldnumber%,
  2156. }        
  2157.  9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:
  2158. keypad_click(wi%,chartype%(Fieldnumber%)-9,1)
  2159. G        
  2160. filter(wi%,
  2161. selected(wi%,field%(buttonfield%(0,22))))
  2162.          
  2163.  36,41,42,43,44,45:
  2164.         
  2165. invert(wi%,ic%)
  2166. (        col%=
  2167. get_icon_cols(wi%,ic%)
  2168. 4        col%=((col%>>4) 
  2169.  (col%<<4)) 
  2170.  %11111111
  2171. (        
  2172. set_icon_cols(wi%,ic%,col%)
  2173. %        boxon%=((col% 
  2174.  %1111)<2)
  2175. %        
  2176. update_selection(boxon%)
  2177.       
  2178.       
  2179.       
  2180. (-1) 
  2181. (        
  2182.  chartype%(Fieldnumber%) 
  2183.           
  2184.  9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:
  2185. keypad_click(wi%,chartype%(Fieldnumber%)-9,4)
  2186. I          
  2187. filter(wi%,
  2188. selected(wi%,field%(buttonfield%(0,22))))
  2189. (          
  2190. match(x%-396,y%-131)
  2191. D          
  2192. show_user_menu(Fieldnumber%-1,oldx%+32,oldy%+16)
  2193.           
  2194. {          
  2195. link$(Fieldnumber%),1)="@" 
  2196.  "OS_CLI","Filer_OpenDir "+
  2197. link$(Fieldnumber%),2) 
  2198. softerror("",91)
  2199. t          
  2200.  36,39:
  2201. (-2) 
  2202. enter_tag 
  2203. edit_blob(Fieldnumber%,chartype%(Fieldnumber%)):OLE_edit%=Fieldnumber%
  2204. x          
  2205.  37,38,40:
  2206. (-2) 
  2207. enter_tag 
  2208. edit_blob(Fieldnumber%,chartype%(Fieldnumber%)):OLE_edit%=-Fieldnumber%
  2209.           
  2210.  41,42,43,44,45:
  2211. ,          
  2212.  Access% 
  2213. invert(wi%,ic%)
  2214.           
  2215. (-2) 
  2216. ,            
  2217.  Access% 
  2218. invert(wi%,ic%)
  2219.             
  2220. enter_tag
  2221.             
  2222. U            
  2223. selected(wi%,ic%) 
  2224.  $Rf%(Fieldnumber%)=" " 
  2225.  $Rf%(Fieldnumber%)=""
  2226.           
  2227.           
  2228. relations
  2229.         
  2230. #        
  2231. lookup(Fieldnumber%)
  2232.       
  2233.       
  2234.  256:
  2235. &      
  2236.  chartype%(Fieldnumber%) 
  2237. J        
  2238.  0,1,2,3,4,5,6,7,8,39,46,47,48,49,50,51,52,53,54,55,56,57,58:
  2239.         
  2240. invert(wi%,ic%)
  2241. 1        
  2242. update_selection(
  2243. selected(wi%,ic%))
  2244.       
  2245.       
  2246.  1024:
  2247.       
  2248. (-2) 
  2249.         
  2250. enter_tag
  2251.         
  2252. (        
  2253.  chartype%(Fieldnumber%) 
  2254.           
  2255.  0,1,2,3,4,5,8:
  2256.            
  2257.  Fieldnumber%>0 
  2258. <            !block%=wi%:
  2259.  "Wimp_GetWindowState",,block%
  2260. ]            
  2261.  Access% 
  2262.  "Wimp_SetCaretPosition",wi%,ic%,x%-block%!4+block%!20,y%,-1,-1
  2263.           
  2264.         
  2265.       
  2266.         
  2267. enter_tag
  2268.  wi%,S$
  2269.  "Wimp_GetCaretPosition",,block%
  2270. +wi%=!block%:ic%=block%!4:pos%=block%!20
  2271. text(wi%,ic%)
  2272. S$,pos%)+Tag$(Fieldnumber%)+
  2273. S$,pos%+1)
  2274. text(wi%,ic%)=S$
  2275. redraw_icon(wi%,ic%)
  2276. set_caret(wi%,ic%)
  2277. set_up_field_menu
  2278.  I%,tabmen%
  2279. tabmen%=(LastTable%<>-1)
  2280.  tabmen% 
  2281. tick_one(tablemenu%,0,LastTable%,LastTable%+1)
  2282.  Fieldnumber%>0 
  2283. lit(menu%(1),1,
  2284.   $AnalyseFunc%="Analyse"
  2285. -  $Fieldpos%="Field: "+Tag$(Fieldnumber%)
  2286. &  $LinkTitle%="Field: "+Fieldname$
  2287. '  $CalcForm%=Tag$(Fieldnumber%)+"="
  2288.  I%=0 
  2289. lit(menu%(10),I%,
  2290.    V%=chartype%(Fieldnumber%)
  2291.  5,50,51:
  2292. &    isadate%=
  2293. lit(menu%(10),1,
  2294. &    $AnalyseFunc%="Analyse months"
  2295. :isadate%=
  2296. is_a_key(Fieldnumber%)>=0 
  2297. lit(menu%(10),1,
  2298. _    
  2299.  isadate%=
  2300. selected(mainW%,field%(Fieldnumber%)) 
  2301.  $AnalyseFunc%="Analyse index"
  2302.  0,1,2,3,4,5,8:
  2303. !    
  2304. lit(menu%(10),0,Access%)
  2305. !    
  2306. lit(menu%(10),2,Access%)
  2307. +    
  2308. lit(menu%(10),3,Access% 
  2309.  tabmen%)
  2310. !    
  2311. lit(menu%(10),5,Access%)
  2312. lit(menu%(10),8,
  2313.  I%=0 
  2314.       keyfield%(I%)=0
  2315.       
  2316.  J%=12 
  2317. $        $
  2318. text(keyW%,4*I%+J%)=""
  2319.       
  2320. !    keyfield%(0)=Fieldnumber%
  2321. +    $
  2322. text(keyW%,12)=Tag$(Fieldnumber%)
  2323.     $
  2324. text(keyW%,14)="L"
  2325. .    $
  2326. text(keyW%,15)=
  2327. (len%(Fieldnumber%))
  2328. 1    keylimit%=TextLength%:$
  2329. text(keyW%,29)=""
  2330.     keylen%=keylimit%
  2331. *    $ChangeTitle%="Field: "+Fieldname$
  2332. 3    $
  2333. text(changeW%,0)="":$
  2334. text(changeW%,1)=""
  2335. link_status
  2336. !    
  2337. lit(menu%(10),4,Modify%)
  2338.     +    
  2339. lit(menu%(10),3,Access% 
  2340.  tabmen%)
  2341. !    
  2342. lit(menu%(10),2,Access%)
  2343. '    
  2344. calc_link("Calculations...",6)
  2345. link_status
  2346. !    
  2347. lit(menu%(10),4,Modify%)
  2348. +    
  2349. lit(menu%(10),3,Access% 
  2350.  tabmen%)
  2351. !    
  2352. lit(menu%(10),2,Access%)
  2353. )    
  2354. calc_link("Combine fields...",7)
  2355. link_status
  2356. 1    
  2357.  46,47,48,49,50,51,52,53,54,55,56,57,58:
  2358.  V%=47 
  2359. #      
  2360. lit(menu%(10),4,Modify%)
  2361. )      
  2362. calc_link("Set base value",47)
  2363.         
  2364. !    
  2365. lit(menu%(10),0,Access%)
  2366.  I%=0 
  2367.       keyfield%(I%)=0
  2368.       
  2369.  J%=12 
  2370. $        $
  2371. text(keyW%,4*I%+J%)=""
  2372.       
  2373. !    keyfield%(0)=Fieldnumber%
  2374.  +    $
  2375. text(keyW%,12)=Tag$(Fieldnumber%)
  2376.     $
  2377. text(keyW%,14)="L"
  2378. ".    $
  2379. text(keyW%,15)=
  2380. (len%(Fieldnumber%))
  2381. #1    keylimit%=TextLength%:$
  2382. text(keyW%,29)=""
  2383.     keylen%=keylimit%
  2384.  36,39:
  2385. &D    
  2386. blob_path(
  2387. ,$database%,REC%,Fieldnumber%,V%,object$)>=0 
  2388. '#      
  2389. lit(menu%(10),6,Access%)
  2390.       
  2391. lit(menu%(10),7,
  2392.       $SaveName%="TextFile"
  2393. *4      $SaveSprite%="sfile_fff;Pptr_hand,12,8;R2"
  2394.       savefunc$="Save text"
  2395. ,        
  2396.  37,40:
  2397. .D    
  2398. blob_path(
  2399. ,$database%,REC%,Fieldnumber%,V%,object$)>=0 
  2400. /#      
  2401. lit(menu%(10),6,Access%)
  2402.       
  2403. lit(menu%(10),7,
  2404.       $SaveName%="Sprite"
  2405. 24      $SaveSprite%="sfile_ff9;Pptr_hand,12,8;R2"
  2406. 3!      savefunc$="Save sprite"
  2407. 4        
  2408. 6D    
  2409. blob_path(
  2410. ,$database%,REC%,Fieldnumber%,V%,object$)>=0 
  2411. 7#      
  2412. lit(menu%(10),6,Access%)
  2413.       
  2414. lit(menu%(10),7,
  2415.       $SaveName%="DrawFile"
  2416. :4      $SaveSprite%="sfile_aff;Pptr_hand,12,8;R2"
  2417.       savefunc$="Save draw"
  2418. <        
  2419. =B    
  2420.  link$(Fieldnumber%)<>"" 
  2421. lit(menu%(10),6,Access%)
  2422. lit(menu%(1),1,
  2423. ):$Fieldpos%="Field: ''"
  2424. update_selection(add%)
  2425.  P%,SP%,F%,SF%
  2426. E>F%=Fieldnumber%:SF%=(F% 
  2427.  128):
  2428. (printorder$)=0 
  2429.  SF%=F%
  2430. F-field$=
  2431. ~(F%):
  2432.  F%<16 
  2433.  field$="0"+field$
  2434. G2sfield$=
  2435. ~(SF%):
  2436.  SF%<16 
  2437.  sfield$="0"+sfield$
  2438.  add% 
  2439. (-1) 
  2440.  printorder$+=sfield$ 
  2441.  printorder$+=field$
  2442. enable_row(calcrow%?Fieldnumber%,
  2443. lit(menu%(6),6,
  2444. lit(menu%(6),7,
  2445. lit(menu%(1),7,
  2446. P$    P%=
  2447. printorder$,field$,P%+1)
  2448.  ((P%-1) 
  2449.  2)=0 
  2450.  P%=0
  2451.  P%>0 
  2452. S9    printorder$=
  2453. printorder$,P%-1)+
  2454. printorder$,P%+2)
  2455. T,    
  2456. enable_row(calcrow%?Fieldnumber%,
  2457. U        
  2458. V        
  2459. W)      SP%=
  2460. printorder$,sfield$,SP%+1)
  2461. X!    
  2462.  ((SP%-1) 
  2463.  2)=0 
  2464.  SP%=0
  2465.  SP%>0 
  2466. Z=      printorder$=
  2467. printorder$,SP%-1)+
  2468. printorder$,SP%+2)
  2469. [.      
  2470. enable_row(calcrow%?Fieldnumber%,
  2471. \        
  2472.  printorder$="" 
  2473. lit(menu%(6),6,
  2474. lit(menu%(6),7,
  2475. lit(menu%(1),7,
  2476. print_click(wi%,ic%,b%)
  2477. b%=(b% 
  2478.  %111)
  2479. selected(wi%,26) 
  2480. show_menu(labelW%,x%-500,y%+200)
  2481.  1,4:
  2482.  ic% 
  2483.  23,24,25:
  2484. m.    
  2485. icon_bit(22,wi%,15,
  2486. selected(wi%,25))
  2487. nB    
  2488. icon_bit(22,wi%,43,
  2489. selected(wi%,25) 
  2490. selected(wi%,23))
  2491. o.    
  2492. icon_bit(22,wi%,45,
  2493. selected(wi%,25))
  2494. q.    
  2495. icon_bit(22,wi%,15,
  2496. selected(wi%,25))
  2497. rB    
  2498. icon_bit(22,wi%,43,
  2499. selected(wi%,25) 
  2500. selected(wi%,23))
  2501. s.    
  2502. icon_bit(22,wi%,45,
  2503. selected(wi%,25))
  2504. t5    $
  2505. text(labelW%,20)=
  2506. text(labelW%,10))+1)
  2507. u6    
  2508. icon_bit(22,labelW%,20,
  2509. selected(labelW%,11))
  2510. v6    
  2511. icon_bit(22,labelW%,12,
  2512. selected(labelW%,11))
  2513. wN    
  2514. position_window(labelW%,x%-303,y%-360,0,0,0,0):
  2515. set_caret(labelW%,10)
  2516. xR    
  2517. get_options(printW%,"<Pbase$Dir>.Resources.PrtOptions"):
  2518. redraw(wi%)
  2519. yT    
  2520.  b%=4 
  2521. close_window(wi%):
  2522. set_caret(mainW%,starthere%) 
  2523. match(0,0)
  2524. restore_window(wi%,remember%+winbuff%(3,1)):
  2525.  b%=4 
  2526. close_window(wi%):
  2527. set_caret(mainW%,starthere%) 
  2528. redraw(wi%)
  2529. |.    
  2530. icon_bit(22,wi%,10,
  2531. selected(wi%,47))
  2532. }.    
  2533. icon_bit(22,wi%,19,
  2534. selected(wi%,47))
  2535. selected(wi%,50) 
  2536. C      
  2537. save_options(printW%,"<Pbase$Dir>.Resources.PrtOptions")
  2538.       
  2539. 6      $SaveName%=$database%+".PrintRes.PrtOptions"
  2540. 4      $SaveSprite%="sfile_7f5;Pptr_hand,12,8;R2"
  2541. "      savefunc$="Save options"
  2542. (      
  2543. show_menu(saveW%,x%-64,y%-20)
  2544.         
  2545. label_click(wi%,ic%,b%)
  2546. b%=(b% 
  2547.  %111)
  2548.  1,4:
  2549.  ic% 
  2550. 5    $
  2551. text(labelW%,20)=
  2552. text(labelW%,10))+1)
  2553. 6    
  2554. icon_bit(22,labelW%,20,
  2555. selected(labelW%,11))
  2556. 6    
  2557. icon_bit(22,labelW%,12,
  2558. selected(labelW%,11))
  2559. 5    $
  2560. text(labelW%,20)=
  2561. text(labelW%,10))+1)
  2562. 6    
  2563. icon_bit(22,labelW%,20,
  2564. selected(labelW%,11))
  2565. 6    
  2566. icon_bit(22,labelW%,12,
  2567. selected(labelW%,11))
  2568. '    
  2569.  b%=4 
  2570. close_window(labelW%)
  2571. d    
  2572. restore_window(wi%,remember%+winbuff%(2,1)):
  2573.  b%=4 
  2574. close_window(wi%) 
  2575. redraw(wi%)
  2576. keypad_click(wi%,ic%,b%)
  2577.  handle%,icon%,T%,N$,date$
  2578. close_window(relateW%)
  2579.  flash% 
  2580. deselect(mainW%,field%(flash%)):flash%=
  2581.  ic%<>12 
  2582. validate(Fieldnumber%,T%,N$)=
  2583.  changed%=
  2584. update_calcs(Fieldnumber%)
  2585. check_change
  2586. b%=(b% 
  2587.  %111)
  2588. fkey_status(ic%)
  2589.  1,4:
  2590.  b%=4 
  2591.  z%=1 
  2592.  z%=-1
  2593.  ic% 
  2594. '    
  2595. scan(z%,
  2596. text(wi%,23)))
  2597.  1:stop%=
  2598. %    
  2599.  2:addr=
  2600. moveto(key%,top,z%)
  2601. &    
  2602.  3:addr=
  2603. moveto(key%,top,-z%)
  2604. &    
  2605.  4:addr=
  2606. moveto(key%,addr,z%)
  2607. '    
  2608.  5:addr=
  2609. moveto(key%,addr,-z%)
  2610. (    
  2611.  6:addr=
  2612. fast_wind(top,addr,z%)
  2613. )    
  2614.  7:addr=
  2615. fast_wind(top,addr,-z%)
  2616. key_select(z%)
  2617. key_select(-z%)
  2618. subfile(z%)
  2619. subfile(-z%)
  2620. -    
  2621. rotate:addr=
  2622. moveto(key%,top,1)
  2623. "    
  2624. allow_search(wi%,z%)
  2625. display(key%,-1)
  2626. #    
  2627.  15:addr=
  2628. shift(z%,key%,0)
  2629. (-1) 
  2630. *      addr=
  2631. find("#"+
  2632. (REC%),key%,0,
  2633.       
  2634. display(key%,addr)
  2635.         
  2636. $    
  2637.  16:addr=
  2638. shift(-z%,key%,0)
  2639. (-1) 
  2640. *      addr=
  2641. find("#"+
  2642. (REC%),key%,0,
  2643.       
  2644. display(key%,addr)
  2645.         
  2646. 6    
  2647.  17:addr=
  2648. shift(0,key%,1):
  2649. display(key%,addr)
  2650. val_help
  2651. +    
  2652. check_change:
  2653. save_everything
  2654. store
  2655. retrieve
  2656. ,    
  2657. filter(wi%,
  2658. selected(wi%,ic%))
  2659. K    
  2660.  "OS_Byte",202,0,239:
  2661. show_menu(specmenu%,oldx%+32,oldy%+16)
  2662. $    
  2663. open_window(specialW%)
  2664. fkey_status(ic%)
  2665.  Modify% 
  2666.  keynumber%
  2667.  ic%>=0 
  2668.  ic%<23 
  2669.   kpad%=ic%
  2670.  ic%=22 
  2671.  $Kpadicon%="Soptoff;r5,14" 
  2672.  $Kpadicon%=$
  2673. val(keypadW%,ic%)
  2674.   $FkeyTitle%=vname$(ic%+9)
  2675. $  keynumber%=buttonfield%(1,ic%)
  2676.  keynumber%>0 
  2677. -    $Fkeyequiv%="F"+
  2678. (keynumber% 
  2679.  %1111)
  2680. /    
  2681. set_icon(fkeyW%,1,(keynumber% 
  2682.  1<<4))
  2683. /    
  2684. set_icon(fkeyW%,2,(keynumber% 
  2685.  1<<5))
  2686.         
  2687.     $
  2688. text(fkeyW%,3)="None"
  2689. deselect(fkeyW%,1)
  2690. deselect(fkeyW%,2)
  2691. lit(menu%(23),0,
  2692. lit(menu%(23),0,
  2693. show_menu(menu%(23),x%-64,y%-20)
  2694. load_fkeys(f$)
  2695.  F,I%
  2696. buttonfield%()=0
  2697. ("<Pbase$Dir>.Resources."+f$)
  2698.  I%=0 
  2699.   buttonfield%(1,I%)=
  2700. close_file(F)
  2701. save_fkeys
  2702.  F,I%
  2703. ("<Pbase$Dir>.Resources.Fkeys")
  2704.  I%=0 
  2705. (buttonfield%(1,I%))
  2706. close_file(F)
  2707. list_fkeys
  2708.  I%,line$,Heading$,F
  2709. @TextName$=$database%+".PrintJobs.Fkeys":$SaveName%=TextName$
  2710. read_print_options
  2711. (format$="horiz":reportdest$="Window"
  2712. 5Heading$=margin$+
  2713. pad("Keystroke equivalents",30)
  2714. LenLine%=
  2715. (Heading$)+2
  2716. extend_named_sliding_block(lineanchor%,LenLine%+4)
  2717. extend_named_sliding_block(headanchor%,LenLine%+4):pos%=!headanchor%
  2718. heap_store(headanchor%,LenLine%,0,pos%,0,Heading$)
  2719. ,Count%=0:Title$="":Title1$="":Title2$=""
  2720. list_head(0)
  2721.  "Hourglass_On"
  2722.  I%=0 
  2723.   K%=buttonfield%(1,I%)
  2724.  K%=0 
  2725.     K$="None"
  2726.         
  2727.     K$="F"+
  2728.  %1111)
  2729. &    
  2730.  (K% 
  2731.  (1<<4)) 
  2732. (139)+K$
  2733. #    
  2734.  (K% 
  2735.  (1<<5)) 
  2736.  K$="^"+K$
  2737. ,  line$=margin$+
  2738. pad(vname$(I%+9),24)+K$
  2739. B  $(!lineanchor%)=line$:
  2740. list_line(-1,lineanchor%,
  2741. (line$),32)
  2742.  I%=13 
  2743. E    line$=margin$+
  2744. pad(vname$(I%+9)+" all subfiles",24)+
  2745. (139)+K$
  2746. D    $(!lineanchor%)=line$:
  2747. list_line(-1,lineanchor%,
  2748. (line$),32)
  2749. ("<Pbase$Dir>.Resources.KeyList")
  2750.     line$=margin$+
  2751. D    $(!lineanchor%)=line$:
  2752. list_line(-1,lineanchor%,
  2753. (line$),32)
  2754. close_file(F)
  2755.  "Hourglass_Off"
  2756. lit(menu%(18),1,
  2757. screen_list
  2758. pitch$=
  2759. pitch("2")
  2760. write_log(-1,"Keystroke equivalents printed")
  2761. scan(z%,s%)
  2762. stop%=
  2763. &   addr=
  2764. moveto(key%,addr,z%)
  2765.   K%=
  2766.  stop%
  2767. store
  2768.  wi%,ic%
  2769.  "Wimp_GetCaretPosition",,block%
  2770. wi%=!block%:ic%=block%!4
  2771. scratchpad$=$
  2772. text(wi%,ic%)
  2773. retrieve
  2774.  wi%,ic%,L%
  2775.  "Wimp_GetCaretPosition",,block%
  2776. wi%=!block%:ic%=block%!4
  2777.  scratchpad$<>"" 
  2778. 8   L%=
  2779. buffer_length(wi%,ic%)
  2780. 9&  $
  2781. text(wi%,ic%)=
  2782. scratchpad$,L%)
  2783. redraw_icon(wi%,ic%)
  2784. set_caret(wi%,ic%)
  2785.  ### Binary Large Objects (B.L.O.B.s) ###
  2786. blob_path(create%,f$,R%,F%,V%,
  2787.  O$,main$,level1$,level2$,d%,L%
  2788.  36,39:O$=".Memo"
  2789.  37,40:O$=".Sprite"
  2790.  38:O$=".Draw"
  2791. main$=f$+O$+
  2792. I"level1$=main$+"."+
  2793.  4900)
  2794. J"level2$=level1$+"."+
  2795. b$=level2$+"."+
  2796.  "OS_File",5,b$ 
  2797.  d%,,,,L%
  2798.  d%=0 
  2799.  create%=
  2800.  "OS_File",8,main$
  2801.  "OS_File",8,level1$
  2802.  "OS_File",8,level2$
  2803.  d%=1 
  2804. load_blob(f$,R%,F%,V%)
  2805.  L%,b$
  2806. V#L%=
  2807. blob_path(
  2808. ,f$,R%,F%,V%,b$)
  2809.  L%>=0 
  2810. extend_named_sliding_block(tempanchor%,L%+1)
  2811.  "OS_File",255,b$,!tempanchor%
  2812. blob_to_file(F,L%)
  2813.  L%>0 
  2814.  "OS_GBPB",2,F,!tempanchor%,L%
  2815. copy_blob(source$,dest$,RS%,RD%,FS%,FD%,V%)
  2816.  L%,Z%,bs$,bd$
  2817. c+L%=
  2818. blob_path(
  2819. ,source$,RS%,FS%,V%,bs$)
  2820.  L%>0 
  2821. e+  Z%=
  2822. blob_path(
  2823. ,dest$,RD%,FD%,V%,bd$)
  2824.  "OS_CLI","Copy "+bs$+" "+bd$+" ~C~V~Q"
  2825. delete_blob(F%,F$,wi%,ic%)
  2826.  flag%,f$
  2827. selected(prefsW%,20) 
  2828.  "OS_CLI","Delete "+F$:flag%=
  2829. confirm(
  2830. msg("Err115")) 
  2831. o(    
  2832.  "OS_CLI","Delete "+F$:flag%=
  2833.  flag% 
  2834.  chartype%(F%) 
  2835. t6    
  2836.  36:$
  2837. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssm!edit"
  2838. u7    
  2839.  37:$
  2840. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssm!paint"
  2841. v6    
  2842.  38:$
  2843. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssm!draw"
  2844.  39:$
  2845. text(wi%,ic%)=""
  2846. redraw_icon(wi%,ic%)
  2847. set_blob_sprite(R%,F%,V%)
  2848.  L%,b$,sprite$
  2849.  R%=RA% 
  2850.  L%=-1 
  2851. blob_path(
  2852. ,$database%,R%,F%,V%,b$)
  2853.  L%>=0 
  2854.  sprite$="small_fff" 
  2855.  sprite$="sm!edit"
  2856.  L%>=0 
  2857.  sprite$="small_ff9" 
  2858.  sprite$="sm!paint"
  2859.  L%>=0 
  2860.  sprite$="small_aff" 
  2861.  sprite$="sm!draw"
  2862. val(mainW%,field%(F%))="R5;Pptr_ext,8,4;S"+sprite$
  2863. redraw_icon(mainW%,field%(F%))
  2864. edit_blob(F%,V%)
  2865.  wi%,ic%,b$,O$,val$
  2866. check_change
  2867. wi%=mainW%:ic%=field%(F%)
  2868.  36:O$="Memo":val$="R5;Pptr_ext,8,4;Ssmall_fff":ftype%=&fff
  2869.  37:O$="Sprite":val$="R5;Pptr_ext,8,4;Ssmall_ff9":ftype%=&ff9
  2870.  38:O$="Draw":val$="R5;Pptr_ext,8,4;Ssmall_aff":ftype%=&aff
  2871.  39:O$="Memo":val$="L;Pptr_ext,8,4":ftype%=&fff
  2872.  40:O$="Sprite":val$="Z0;Ssmall_ff9":ftype%=&ff9
  2873. blob_path(
  2874. ,$database%,REC%,F%,V%,b$)<0 
  2875.  V%<>40 
  2876. val(wi%,ic%)=val$
  2877.  "OS_CLI","Copy <PBase$Dir>.Resources.Objects."+O$+" "+b$+" ~C~V"
  2878. redraw_icon(wi%,ic%)
  2879. 4block%!0=256:block%!12=0:block%!16=5:block%!20=0
  2880. 3block%!24=0:block%!28=0:block%!32=0:block%!36=0
  2881. )block%!40=ftype%:$(block%+44)=b$+
  2882.  "Wimp_SendMessage",18,block%,0
  2883. transfer_blob(wi%,ic%,file$,ft%)
  2884.  F%,V%,L%,W%,b$
  2885.  wi%<>mainW% 
  2886. check_change
  2887. #F%=(ic%+1) 
  2888.  2:V%=chartype%(F%)
  2889.  ft%=-1 
  2890.  link$(F%)="@"+file$:link$(0)="LOADED"
  2891.  ft%=&fff 
  2892. install_blob:$
  2893. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssmall_fff"
  2894.  ft%=&ff9 
  2895. install_blob:$
  2896. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssmall_ff9"
  2897.  ft%=&aff 
  2898. install_blob:$
  2899. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssmall_aff"
  2900.  ft%=&fff 
  2901. install_blob:
  2902. show_text_block(F%)
  2903.  ft%=&ff9 
  2904. install_blob:
  2905. show_picture(F%)
  2906. redraw_icon(wi%,ic%)
  2907. install_blob
  2908. blob_path(
  2909. ,$database%,REC%,F%,V%,b$)
  2910.  "OS_CLI","Remove "+b$
  2911.  "OS_CLI","Copy "+file$+" "+b$+" ~C~V"
  2912. show_text_block(F%)
  2913.  F,b$,I%,L%,base%
  2914.  F%=0 
  2915. base%=Rf%(F%)
  2916. blob_path(
  2917. ,$database%,REC%,F%,39,b$)
  2918.  L%>0 
  2919.  L%>len%(F%) 
  2920.  L%=len%(F%)
  2921.  ### Load only as much of file as we can display ###
  2922. >  F=
  2923. (b$):
  2924.  F>0 
  2925.  "OS_GBPB",4,F,base%,L%:
  2926. close_file(F)
  2927.  ### Replace any characters<32 by spaces - but ONLY for display ###
  2928.  I%=0 
  2929.  L%-1
  2930. #    
  2931.  base%?I%<32 
  2932.  base%?I%=32
  2933.   base%?L%=10
  2934.  $base%=""
  2935. show_picture(F%)
  2936.  F,f$,I%,max%,len%,x%,y%,w%,h%
  2937.  F%=0 
  2938. /len%=
  2939. blob_path(
  2940. ,$database%,REC%,F%,40,f$)
  2941. E!block%=mainW%:block%!4=field%(F%):
  2942.  "Wimp_GetIconState",,block%
  2943. <x%=block%!8:y%=block%!12:w%=block%!16-x%:h%=block%!20-y%
  2944.  "Wimp_DeleteIcon",,block%
  2945.  len%>=0 
  2946. extend_named_sliding_block(Rf%(F%),len%+4):base%=!Rf%(F%)
  2947. /  !base%=len%+4:
  2948.  "OS_File",255,f$,base%+4
  2949. O  field%(F%)=
  2950. create_icon(mainW%,x%,y%,w%,h%,&0700A53E,"",base%+16,base%,0)
  2951. K  field%(F%)=
  2952. create_icon(mainW%,x%,y%,w%,h%,&0700A53E,"",paint%,1,384)
  2953. filter(wi%,on%)
  2954.  x%,y%,vxmin%,vymax%,scrollx%,scrolly%
  2955. filter%=on%:$Query%=""
  2956.  on% 
  2957.  wi% 
  2958.  keypadW%:
  2959. 4    !block%=wi%:
  2960.  "Wimp_GetWindowState",,block%
  2961. =    
  2962. position_window(filterW%,block%!12,block%!8,0,0,0,0)
  2963. A    
  2964.  mainW%:
  2965. open_at(firstfilter%,filterW%,22,482,314,44,44)
  2966. set_caret(queryW%,0)
  2967. close_it(filterW%):
  2968. set_caret(mainW%,starthere%)
  2969. fast_wind(T%,P%,D%)
  2970.  fast%=
  2971. text(keypadW%,23))
  2972. D%=(D%+1) 
  2973.  P%<>T% 
  2974.  I%<fast%
  2975.  filter% 
  2976. next_match(P%,D%,Filter$,Z%) 
  2977. neighbour(key%,P%,D%)
  2978.   I%+=1
  2979.  P%=T% 
  2980.  filter% 
  2981.  7:P%=
  2982. neighbour(key%,P%,1-D%)
  2983. display(key%,P%)
  2984. subfile(direction%)
  2985. filemem%(file%)=addr
  2986. file%+=direction%
  2987.  file%=6 
  2988.  file%=0
  2989.  file%=-1 
  2990.  file%=5
  2991. "$Subfilename%=$Subfile%(file%)
  2992. top=8*file%+LH%
  2993.  filemem%(file%)>=0 
  2994. selected (prefsW%,43) 
  2995. .  addr=filemem%(file%):
  2996. display(key%,addr)
  2997.  addr=
  2998. moveto(key%,top,1)
  2999. save_subfilenames
  3000.  present%=7 
  3001. !  F=
  3002. ($database%+".Subfiles")
  3003.  I%=0 
  3004. #F,$Subfile%(I%)
  3005. close_file(F)
  3006. allow_search(wi%,e%)
  3007. select(searchW%,5):
  3008. deselect(searchW%,6)
  3009. select(searchW%,6):
  3010. deselect(searchW%,5)
  3011. text(searchW%,1)="":
  3012. redraw_icon(searchW%,1)
  3013. text(searchW%,7)="":
  3014. redraw_icon(searchW%,7)
  3015. text(searchW%,3)=Index$(key%)
  3016.  wi% 
  3017.  keypadW%:
  3018. 7  !block%=keypadW%:
  3019.  "Wimp_GetWindowState",,block%
  3020. position_window(searchW%,block%!12,block%!8,0,0,0,0)
  3021.  mainW%:
  3022. open_at(firstsearch%,searchW%,13,456,314,114,52)
  3023. set_caret(searchW%,1)
  3024. val_help
  3025.  name$,subst%,field%,extra%
  3026.  Fieldnumber%>0 
  3027.   name$=link$(Fieldnumber%)
  3028.     %+  field%=
  3029. trailing_number(name$,exact%)
  3030.     &#  subst%=
  3031. leading_number(name$)
  3032.     ''  Tablenumber%=
  3033. table_number(name$)
  3034.     (4  
  3035.  Tablenumber%<>-1 
  3036. show_table(Tablenumber%)
  3037. val_on_off
  3038.  I%=1 
  3039.     /   
  3040. selected(prefsW%,21) 
  3041.     0$    
  3042. :$valid%(I%)=$rvalid%(I%)
  3043.     1(    
  3044. :$valid%(I%)="Pptr_write,4,4"
  3045. save_click(wi%,ic%,b%)
  3046.  p$,H$
  3047. butt%=(b% 
  3048.  %111)
  3049.  wi% 
  3050.  saveW%:
  3051.   Filename$=$SaveName%
  3052.  savefunc$ 
  3053.  "New database":
  3054.     Type%=0
  3055.     ?6    
  3056. Filename$,1)<>"!" 
  3057.  Filename$="!"+Filename$
  3058.     @5    Filename$=
  3059. Filename$,10):$SaveName%=Filename$
  3060.  "Save as text":
  3061.     Type%=&fff
  3062.     C7    Start%=!textanchor%:End%=Start%+Count%*LenLine%
  3063.     $Start%=pitch$
  3064.  "Save list":
  3065.     F     Type%=&fff:savetofile%=
  3066.  "Save text":
  3067.     Type%=&fff:
  3068.     I=    len%=
  3069. blob_path(
  3070. ,$database%,REC%,Fieldnumber%,36,f$)
  3071.     J7    
  3072. extend_named_sliding_block(saveanchor%,len%+1)
  3073.     K(    
  3074.  "OS_File",255,f$,!saveanchor%
  3075.     L,    Start%=!saveanchor%:End%=Start%+len%
  3076.  "Save sprite":
  3077.     Type%=&ff9
  3078.     O=    len%=
  3079. blob_path(
  3080. ,$database%,REC%,Fieldnumber%,37,f$)
  3081.     P7    
  3082. extend_named_sliding_block(saveanchor%,len%+1)
  3083.     Q(    
  3084.  "OS_File",255,f$,!saveanchor%
  3085.     R,    Start%=!saveanchor%:End%=Start%+len%
  3086.  "Save draw":
  3087.     Type%=&aff
  3088.     U=    len%=
  3089. blob_path(
  3090. ,$database%,REC%,Fieldnumber%,38,f$)
  3091.     V7    
  3092. extend_named_sliding_block(saveanchor%,len%+1)
  3093.     W(    
  3094.  "OS_File",255,f$,!saveanchor%
  3095.     X,    Start%=!saveanchor%:End%=Start%+len%
  3096.  "Save options":
  3097.     Type%=&7f5
  3098.  "Save query":
  3099.     $savebuff%=query$
  3100.     ];    Start%=savebuff%:End%=Start%+
  3101. (query$)+1:Type%=&7f4
  3102.     ^*    
  3103.  "Save selection":
  3104. save_selection
  3105.  "Save table":
  3106.     `c    z$=
  3107. table_info(Tablenumber%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  3108.     aR    Start%=!tabanchor%(Tablenumber%):End%=Start%+offset%+Rows%*Rec%:Type%=&7f1
  3109.     b=    
  3110.  "Save table as CSV":Filename$=$SaveName%:Type%=&dfe
  3111.  "Save form file":
  3112.     Type%=&7f2
  3113. lit(menu%(9),3,
  3114. lit(menu%(9),4,
  3115. lit(menu%(9),5,
  3116.     h3    
  3117.  adjust%=
  3118. first_field>0 
  3119. default_key
  3120.     i9    
  3121.  "Export selected":
  3122. export_selected(printorder$)
  3123.  savesubW%:
  3124.  savefunc$ 
  3125.  "Export subset":
  3126.     n#    Filename$=$SubName%:Type%=0
  3127.  "Export CSV":
  3128.     p&    Filename$=$SubName%:Type%=&dfe
  3129.  ic% 
  3130.     u2  
  3131.  (b% 
  3132.  %11110000)>0 
  3133. init_drag(wi%,ic%,5)
  3134. Filename$,".")>0 
  3135.     x7    
  3136.  butt%<>2 
  3137. save(Filename$,Type%,Start%,End%)
  3138.     y)    
  3139. write_log(-1,Filename$+" saved")
  3140.  butt%=4 
  3141.       
  3142.  wi%=saveW% 
  3143.     |$        
  3144.  "Wimp_CreateMenu",,-1
  3145.     }:        
  3146. close_it(wi%):
  3147. set_caret(mainW%,starthere%)
  3148.       
  3149.         
  3150. softerror("",33)
  3151.  wi%=saveW% 
  3152.      
  3153.  "Wimp_CreateMenu",,-1
  3154. 6    
  3155. close_it(wi%):
  3156. set_caret(mainW%,starthere%)
  3157. key_click(wi%,ic%,b%)
  3158. butt%=(b% 
  3159.  %111)
  3160. z%=(butt%=1)-(butt%=4)
  3161.  butt% 
  3162.  2,4:
  3163.  ic% 
  3164.  8,9,10,11:
  3165. <    
  3166. tick_one(fieldmenu%,0,fields%-1,keyfield%(ic%-8)-1)
  3167. D    
  3168. show_menu(fieldmenu%,oldx%+32,oldy%+16):fieldfunc$=
  3169. (ic%-8)
  3170.  ic% 
  3171.  0,1,2,3:
  3172. kcycle(keyfield%(ic%),4*ic%+12,z%)
  3173.  4,5,6,7:
  3174. kcycle(keyfield%(ic%-4),4*ic%-4,-z%)
  3175.  keyfunc$<>"Current key" 
  3176.     keylimit%=0:keylen%=0
  3177.  J%=0 
  3178. (      keylimit%+=len%(keyfield%(J%))
  3179. +      keylen%+=
  3180. text(keyW%,4*J%+15))
  3181. /      
  3182.  keylen%>keylimit%:
  3183. softerror("",26)
  3184. (      
  3185.  keylen%=0:
  3186. softerror("",105)
  3187.       
  3188.       
  3189.  keyfunc$ 
  3190.         
  3191.  "Primary key":
  3192. *        
  3193. save_form($database%+".Form")
  3194.         key%=0
  3195.         
  3196. copy_keydata(key%)
  3197. *        RA%=
  3198. ($Records%):f$=$database%
  3199. &        
  3200. make_empty_index(RA%,0,
  3201. *        
  3202. save_recs(f$+".Database",RA%)
  3203. -        present%=7:
  3204. save_keys:
  3205. save_calcs
  3206. /        design%=
  3207. :present%=1:
  3208. get_it_in(f$)
  3209. 0        
  3210.  "New primary key":
  3211. new_tree(file%)
  3212. /        
  3213.  "Index field":
  3214. create_index(key%)
  3215.       
  3216.         
  3217.   keyfunc$=""
  3218.  b%=4 
  3219. close_window(keyW%):
  3220. set_caret(mainW%,starthere%)
  3221. close_window(keyW%):
  3222. set_caret(mainW%,starthere%)
  3223. shade_key_icons(con%)
  3224. icon_bit(22,keyW%,30,con%)
  3225.  I%=0 
  3226. icon_bit(22,keyW%,I%,con%)
  3227. icon_bit(22,keyW%,31,con%)
  3228. icon_bit(22,keyW%,12,
  3229. icon_bit(22,keyW%,16,
  3230. icon_bit(22,keyW%,20,
  3231. icon_bit(22,keyW%,24,
  3232. icon_bit(22,keyW%,30,con%)
  3233. icon_bit(22,keyW%,35,con%)
  3234. icon_bit(22,keyW%,37,con%)
  3235. kcycle(
  3236.  F%,show%,z%)
  3237.  J%=0 
  3238. text(keyW%,show%+J%)=""
  3239. F%+=z%
  3240.  F%>fields% 
  3241.  F%=0
  3242.  F%<0 
  3243.  F%=fields%
  3244.  F%>0 
  3245. text(keyW%,show%)=Tag$(F%)
  3246. text(keyW%,show%+1)="1":
  3247. set_caret(keyW%,show%+1)
  3248. text(keyW%,show%+2)="L"
  3249. text(keyW%,show%+3)=
  3250. (len%(F%))
  3251.  J%=0 
  3252. redraw_icon(keyW%,show%+J%)
  3253. tick_one(fieldmenu%,0,fields%-1,F%-1)
  3254. copy_keydata(key%)
  3255.  J%,chars%,pos%,word%,field%
  3256. KL%(key%)=0
  3257.  J%=0 
  3258. 7  chars%=
  3259. text(keyW%,4*J%+15)):KL%(key%)+=chars%
  3260. text(keyW%,4*J%+14) 
  3261.  "L":pos%=0
  3262.  "R":pos%=255
  3263. '    
  3264. :pos%=
  3265. text(keyW%,4*J%+14))
  3266. $  word%=
  3267. text(keyW%,4*J%+13))
  3268.   field%=keyfield%(J%)
  3269. <  KW%(key%,J%)=chars%+(pos%<<8)+(word%<<16)+(field%<<24)
  3270.   KF%(key%,J%)=field%
  3271. #case%(key%)=
  3272. selected(keyW%,30)
  3273. set_keydata(key%)
  3274.  J%,chars%,pos%,word%,field%,W%
  3275.  J%=12 
  3276. text(keyW%,J%)=""
  3277.  J%=0 
  3278.   W%=KW%(key%,J%)
  3279.  W%>0 
  3280. 7    chars%=W% 
  3281.  255:$
  3282. text(keyW%,4*J%+15)=
  3283. (chars%)
  3284.     pos%=(W%>>8) 
  3285.  pos% 
  3286. '      
  3287. text(keyW%,4*J%+14)="L"
  3288. )      
  3289.  255:$
  3290. text(keyW%,4*J%+14)="R"
  3291. )      
  3292. text(keyW%,4*J%+14)=
  3293. (pos%)
  3294.         
  3295. ;    word%=(W%>>16) 
  3296.  255:$
  3297. text(keyW%,4*J%+13)=
  3298. (word%)
  3299. >    field%=KF%(key%,J%):$
  3300. text(keyW%,4*J%+12)=Tag$(field%)
  3301.     keyfield%(J%)=field%
  3302. text(keyW%,29)=
  3303. (key%)
  3304. set_icon(keyW%,30,case%(key%))
  3305. set_icon(keyW%,35,incspace%(key%))
  3306. set_icon(keyW%,37,null%(key%))
  3307. key_select(D%)
  3308.  "Wimp_GetCaretPosition",,block%
  3309. wi%=block%!0:ic%=block%!4
  3310. colour(key%,2)
  3311.  +1:key%=(key%+1) 
  3312.  (Keys%+1)
  3313.  -1:key%-=1:
  3314.  key%<0 
  3315.  key%=Keys%
  3316. colour(key%,1)
  3317. set_keydata(key%)
  3318. text(searchW%,3)=Index$(key%):
  3319. redraw_icon(searchW%,3)
  3320. top=8*file%+LH%
  3321. addr=
  3322. moveto(key%,top,1)
  3323. set_caret(wi%,ic%)
  3324. set_colours(wi%,ic%,b%)
  3325.  (b% 
  3326.  %111)=4 
  3327.  z%=1 
  3328.  z%=-1
  3329.  (b% 
  3330.  %111) 
  3331.  1,4:
  3332.  ic% 
  3333.  0,1,2,3,4,5,6:
  3334. @    col%=
  3335. get_icon_cols(wi%,ic%):fg%=col% 
  3336.  16:bg%=col% 
  3337.  I    
  3338. selected(wi%,11) 
  3339.  fg%=(fg%+z%+16) 
  3340.  bg%=(bg%+z%+16) 
  3341. !'    col%=fg%+bg%*16:ncol%(ic%)=col%
  3342. "$    
  3343. set_icon_cols(wi%,ic%,col%)
  3344.  9,10:
  3345.     fcol%()=ncol%()
  3346.  I%=0 
  3347.  Keys%
  3348.       
  3349. colour(I%,2)
  3350. colour(0,0)
  3351. colour(key%,1)
  3352.  I%=1 
  3353.  fields%
  3354. +F      
  3355.  link$(I%)<>"" 
  3356. set_icon_cols(mainW%,field%(I%),ncol%(6))
  3357. -!    
  3358.  ic%=10 
  3359. write_colours
  3360. .     
  3361.  "Wimp_CreateMenu",,-1
  3362. 06    
  3363. read_colours("<Pbase$Dir>.Resources.Colours")
  3364.  I%=0 
  3365. 2*      
  3366. set_icon_cols(wi%,I%,ncol%(I%))
  3367. create_click
  3368.  Calc$
  3369. butt%=(b% 
  3370.  %111)
  3371.  butt% 
  3372.  2,4:
  3373.  ic%=36 
  3374. show_menu(menu%(menunumber%),oldx%+32,oldy%+16)
  3375.  ic%=44 
  3376.  fieldmenu%=
  3377. field_menu(fields%):
  3378. tick_one(fieldmenu%,0,fields%-1,Fieldnumber%-1):
  3379. show_menu(fieldmenu%,oldx%+32,oldy%+16)
  3380.  butt%=4 
  3381.  z%=1 
  3382.  butt%=1 
  3383.  z%=-1 
  3384.  ic% 
  3385. set_limits(0,0,8,8)
  3386. set_limits(36,36,40,11)
  3387. set_limits(9,9,35,19)
  3388. set_limits(41,41,45,14)
  3389. set_limits(46,46,59,16)
  3390. change_type(z%,menunumber%)
  3391. change_type(-z%,menunumber%)
  3392. create_field(
  3393. ($InsText%),posx%,posy%,Calc$)
  3394. remove_field(Fieldnumber%,
  3395. ,Calc$)
  3396. create_field(Fieldnumber%,posx%,posy%,Calc$)
  3397. remove_field(Fieldnumber%,
  3398. ,Calc$)
  3399. icon_bit(22,createW%,13,(
  3400. selected(createW%,14)))
  3401.   F%=
  3402. ($InsText%)
  3403.  F%>0 
  3404.  F%<=fields% 
  3405. Q(    
  3406.  F%<Fieldnumber% 
  3407.  Z%=-1 
  3408.  Z%=1
  3409. R(    
  3410. re_sequence(Fieldnumber%,F%,Z%)
  3411. close_window(createW%)
  3412. swap_fields(Fieldnumber%,
  3413. ($InsText%))
  3414. close_it(createW%)
  3415.  42:$boxW%=
  3416. ($LenText%)*16+16):
  3417. redraw_icon(createW%,9)
  3418. update_box
  3419.  (present% 
  3420.  4)=0 
  3421. lit(menu%(9),1,(fields%>0))
  3422.  ic% 
  3423.  18,29,30:
  3424.  butt%=4 
  3425. close_window(createW%)
  3426. _        
  3427. `#    
  3428. icon_bit(22,createW%,18,
  3429. a+    
  3430. icon_bit(22,createW%,30,
  3431.  adjust%)
  3432. b#    
  3433. icon_bit(22,createW%,29,
  3434. update_box
  3435.  fieldtype% 
  3436.  0,1,2,3,4,5,6,7,46,47:
  3437.  adjust% 
  3438. icon_bit(22,createW%,6,
  3439. icon_bit(22,createW%,6,
  3440. icon_bit(22,createW%,14,(fieldtype%=3 
  3441.  fieldtype%=6))
  3442. icon_bit(22,createW%,13,(fieldtype%=3 
  3443.  fieldtype%=6) 
  3444. selected(createW%,14))
  3445. icon_bit(22,createW%,15,(fieldtype%=3 
  3446.  fieldtype%=47))
  3447. icon_bit(22,createW%,25,(fieldtype%=3))
  3448. icon_bit(22,createW%,26,
  3449.  adjust%)
  3450.  adjust% 
  3451. lit(menu%(9),2,(fields%>0))
  3452. r $ValText%=vname$(fieldtype%)
  3453. redraw_icon(createW%,28)
  3454. set_limits(t%,f%,l%,m%)
  3455. fieldtype%=t%
  3456. firsttype%=f%
  3457. lasttype%=l%
  3458. menunumber%=m%
  3459. tick_one(menu%(m%),0,l%-f%,t%-f%)
  3460. update_box
  3461. change_type(d%,m%)
  3462.  1:fieldtype%+=1
  3463.  fieldtype%>lasttype% 
  3464.  fieldtype%=firsttype%
  3465.  -1:fieldtype%-=1
  3466.  fieldtype%<firsttype% 
  3467.  fieldtype%=lasttype%
  3468. tick_one(menu%(m%),0,lasttype%-firsttype%,fieldtype%-firsttype%)
  3469. update_box
  3470. passwords(wi%,ic%,b%)
  3471. b%=(b% 
  3472.  %111)
  3473.  1,4:
  3474.  ic% 
  3475. %    
  3476.  $Write%="" 
  3477.  $Write%=$Read%
  3478. *    
  3479.  $Manager%="" 
  3480.  $Manager%=$Write%
  3481. "    F=
  3482. ($database%+".Colours")
  3483. #F=35
  3484. $    S$=
  3485. encrypt($Read%,
  3486. #F,S$
  3487. %    S$=
  3488. encrypt($Write%,
  3489. #F,S$
  3490. '    S$=
  3491. encrypt($Manager%,
  3492. #F,S$
  3493.  I%=9 
  3494. "      
  3495. selected(passW%,I%)
  3496. close_file(F)
  3497. ,    
  3498. lit(menu%(1),6,
  3499. selected(passW%,9))
  3500. -    
  3501. lit(menu%(1),8,
  3502. selected(passW%,13))
  3503. -    
  3504. lit(menu%(1),9,
  3505. selected(passW%,13))
  3506. -    
  3507. lit(menu%(1),2,
  3508. selected(passW%,14))
  3509. !    
  3510. selected(passW%,9) 
  3511. !      
  3512. close_window(keypadW%)
  3513. 5      
  3514. position_window(keypadW%,100,50,0,0,0,0)
  3515.         
  3516. D    
  3517.  b%=4 
  3518. close_window(passW%):
  3519. set_caret(mainW%,starthere%)
  3520. asterisk(
  3521.      
  3522. selected(passW%,16) 
  3523. &      
  3524. open_log("<Log$Dir>.Log",
  3525. '      
  3526. close_log("<Log$Dir>.Log")
  3527.         
  3528. :    
  3529. icon_bit(22,prefsW%,34,
  3530. selected(passW%,15))
  3531. M    
  3532. selected(passW%,16) 
  3533. write_log(-1,"Logging discontinued")
  3534. A    $
  3535. text(aclW%,0)="":$
  3536. text(aclW%,1)="":$
  3537. text(aclW%,12)=""
  3538. @    
  3539. deselect(aclW%,
  3540. selected_esg(aclW%,1)):
  3541. select(aclW%,4)
  3542. /    
  3543. open_window(aclW%):
  3544. set_caret(aclW%,0)
  3545. 4    
  3546. restore_window(wi%,remember%+winbuff%(1,1))
  3547. P    
  3548.  b%=4 
  3549. close_window(wi%):
  3550. set_caret(mainW%,starthere%) 
  3551. redraw(wi%)
  3552.  F,user$,passwd$,ok%
  3553.  (b% 
  3554.  %111) 
  3555.  ic% 
  3556. !    
  3557. close_window(aclW%)
  3558. #    
  3559. selected_esg(aclW%,1) 
  3560.       
  3561.       user$=$
  3562. text(aclW%,0)
  3563. I      
  3564. confirm(
  3565. msg("Err123,"+user$)) 
  3566. remove_user(user$,
  3567. ):ok%=
  3568.       
  3569. )      
  3570. remove_user($
  3571. text(aclW%,0),
  3572.       
  3573. 3        
  3574. text(aclW%,0)="":
  3575. softerror("",126)
  3576. B        
  3577. text(aclW%,1)<>$
  3578. text(aclW%,12):
  3579. softerror("",108)
  3580. 3        
  3581. text(aclW%,1)="":
  3582. softerror("",125)
  3583.         
  3584. -        user$=
  3585. encrypt($
  3586. text(aclW%,0),
  3587. /        passwd$=
  3588. encrypt($
  3589. text(aclW%,1),
  3590.         
  3591.  acl% 
  3592. "          F=
  3593. ("<Acl$Dir>.acl")
  3594.           
  3595. $          
  3596. ("<Acl$Dir>.acl")
  3597.           acl%=
  3598.         
  3599. 6        
  3600. #F,user$,passwd$,
  3601. selected_esg(aclW%,1)-3
  3602.         
  3603. close_file(F)
  3604.         ok%=
  3605.       
  3606.         
  3607. A    $
  3608. text(aclW%,0)="":$
  3609. text(aclW%,1)="":$
  3610. text(aclW%,12)=""
  3611. K    
  3612. redraw_icon(aclW%,0):
  3613. redraw_icon(aclW%,1)::
  3614. redraw_icon(aclW%,12)
  3615. set_caret(aclW%,0)
  3616. 6    
  3617.  (b% 
  3618.  %111)=4 
  3619.  ok%=
  3620. close_window(aclW%)
  3621. remove_user(u$,remove%)
  3622.  user$,id$,p%,p%,ptr%,F,found%
  3623.  u$<>"" 
  3624.   user$=
  3625. encrypt(u$,
  3626.  acl% 
  3627.     F=
  3628. ("<Acl$Dir>.acl")
  3629.         
  3630.       ptr%=
  3631.       
  3632. #F,id$,p$,p%
  3633.       found%=(id$=user$)
  3634.  found% 
  3635.  found% 
  3636. 1      
  3637. #F=ptr%:
  3638. (id$),"Z"),
  3639. (p$),"Z"),0
  3640. *      
  3641.  remove% 
  3642. softerror(u$,124)
  3643.         
  3644. close_file(F)
  3645. open_log(f$,resume%)
  3646.  "OS_File",5,f$ 
  3647.  d%=1 
  3648.   loghandle%=
  3649. #loghandle%=
  3650. #loghandle%
  3651.  resume% 
  3652. #loghandle%,"Logging resumed "+
  3653. #loghandle%,"Log opened "+
  3654. #loghandle%,"Database: "+$database%
  3655.   loghandle%=
  3656. #loghandle%,"Log started "+
  3657. #loghandle%,"Database: "+$database%
  3658.  acl% 
  3659. #loghandle%,"User: "+user$
  3660. #loghandle%,"Password level used: "+
  3661. (pw%)
  3662. #loghandle%,
  3663. 35,"-")
  3664. close_file(loghandle%)
  3665. logging%=
  3666. close_log(f$)
  3667.  logging% 
  3668.   loghandle%=
  3669. #loghandle%=
  3670. #loghandle%
  3671. #loghandle%,
  3672. 35,"-")
  3673. #loghandle%,"Log closed "+
  3674. #loghandle%,
  3675. 35,"=")
  3676. close_file(loghandle%)
  3677.  "OS_File",18,f$,&fff
  3678.   logging%=
  3679. write_log(record%,S$)
  3680.  loghandle%
  3681.  logging% 
  3682. #  loghandle%=
  3683. ("<Log$Dir>.Log")
  3684. #loghandle%=
  3685. #loghandle%
  3686.  record%>=0 
  3687. #loghandle%,"    [Record number: "+
  3688. (record%)+"]"
  3689. #loghandle%,"    "+S$
  3690. close_file(loghandle%)
  3691. count(key%,
  3692.  RU%)
  3693.  zero%,file%,top,sum%
  3694.      RU%=0
  3695.  file%=0 
  3696.   top=8*file%+LH%
  3697. #"  sum%=
  3698. count_recs(key%,zero%)
  3699.   RU%+=sum%
  3700. %%  $
  3701. text(miscW%,file%+22)=
  3702. (sum%)
  3703.  file%
  3704. count_recs(key%,
  3705.  ptr%)
  3706.  P%,count%,S%,R%,S$,k$
  3707.  "Hourglass_On"
  3708. neighbour(key%,top,1)
  3709.  P%<>top
  3710.   count%+=1
  3711.  ptr%>0 
  3712.     R%=
  3713. rec_no(k$,key%,P%)
  3714. 1#    
  3715.  R%>highest% 
  3716.  highest%=R%
  3717. 21    !ptr%=R%:$(ptr%+4)=k$:ptr%+=4+KL%(key%)+1
  3718.     flagptr%?R%=0
  3719.   P%=
  3720. neighbour(key%,P%,1)
  3721.  "Hourglass_Off"
  3722. =count%
  3723. analyse(func%)
  3724.  L%,P%,S%,S$,K$,k$,ptr%,pos%,N%,values%,key%
  3725.  S$(),N%()
  3726. read_print_options
  3727.  func%<0 
  3728.  L%=6 
  3729.  key%=func%:L%=KL%(key%)
  3730.  L%>8 
  3731.  Tab%(0)=Lmargin%+L%+6 
  3732.  Tab%(0)=Lmargin%+14
  3733. Tab%(1)=Tab%(0)+6
  3734.  func%<0 
  3735. B:  Title$="Analysis of date field: "+Tag$(Fieldnumber%)
  3736. C5  Heading$=
  3737. pad(margin$+"Month",Tab%(0))+"Number"
  3738. DV  TextName$=$database%+".PrintJobs.DateAn"+Tag$(Fieldnumber%):$SaveName%=TextName$
  3739. F/  Title$="Analysis of index: "+Index$(key%)
  3740. G8  Heading$=
  3741. pad(margin$+"Contents",Tab%(0))+"Number"
  3742. HU  TextName$=$database%+".PrintJobs.IndAn"+Tag$(Fieldnumber%):$SaveName%=TextName$
  3743. Title1$=
  3744. LenLine%=
  3745. (Heading$)+2
  3746. extend_named_sliding_block(lineanchor%,LenLine%+4)
  3747. extend_named_sliding_block(headanchor%,LenLine%+4):pos%=!headanchor%
  3748. heap_store(headanchor%,LenLine%,0,pos%,0,Heading$)
  3749. reportdest$="Window"
  3750. Count%=0
  3751. list_head(0)
  3752.  "Hourglass_On"
  3753.  func%<0 
  3754. analyse_date 
  3755. analyse_index
  3756.  "Hourglass_Off"
  3757. rule_off(45)
  3758. V;Line$=
  3759. pad(margin$+"Total",Tab%(0))+
  3760. justify(
  3761. (N%),1,0)
  3762. W@$(!lineanchor%)=Line$:
  3763. list_line(-1,lineanchor%,
  3764. (Line$),32)
  3765. rule_off(45)
  3766. screen_list
  3767. analyse_index
  3768. K$="***"
  3769. neighbour(key%,top,1)
  3770.  P%<>top
  3771.     R%=
  3772. rec_no(k$,key%,P%)
  3773. a#    
  3774.  k$<>K$ 
  3775.  values%+=1:K$=k$
  3776. b     P%=
  3777. neighbour(key%,P%,1)
  3778.  S$(values%),N%(values%)
  3779. K$="***"
  3780. neighbour(key%,top,1)
  3781.  P%<>top
  3782.     R%=
  3783. rec_no(k$,key%,P%)
  3784. iE    
  3785.  k$<>K$ 
  3786.  ptr%+=1:K$=k$:S$(ptr%)=K$:N%(ptr%)=1 
  3787.  N%(ptr%)+=1
  3788. j     P%=
  3789. neighbour(key%,P%,1)
  3790.  I%=1 
  3791.  ptr%
  3792. mI  S$=S$(I%):
  3793.  S$="" 
  3794.  S$="<null>" 
  3795.  isadate% 
  3796. reverse_date(S$)
  3797. nH  Line$=margin$+S$:Line$=
  3798. pad(Line$,Tab%(0))+
  3799. justify(
  3800. (N%(I%)),1,0)
  3801. oB  $(!lineanchor%)=Line$:
  3802. list_line(-1,lineanchor%,
  3803. (Line$),32)
  3804.   N%+=N%(I%)
  3805. analyse_date
  3806.  S$(12),N%(12)
  3807. vYS$()="<null>","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
  3808. w*dbasehandle%=
  3809. ($database%+".Database")
  3810. neighbour(key%,top,1)
  3811.  P%<>top
  3812.   R%=
  3813. rec_no(k$,key%,P%)
  3814. readsmarray(dbasehandle%,R%)
  3815.   S$=F$(Fieldnumber%)
  3816.  S$<>"" 
  3817.     M%=
  3818. S$,4,2))
  3819.     N%(M%)+=1
  3820.  N%(0)+=1
  3821.   P%=
  3822. neighbour(key%,P%,1)
  3823. close_file(dbasehandle%)
  3824.  I%=0 
  3825. L  Line$=margin$+S$(I%):Line$=
  3826. pad(Line$,Tab%(0))+
  3827. justify(
  3828. (N%(I%)),1,0)
  3829. B  $(!lineanchor%)=Line$:
  3830. list_line(-1,lineanchor%,
  3831. (Line$),32)
  3832.   N%+=N%(I%)
  3833. update_stats
  3834. $filesize%=
  3835. (RA%)
  3836. $Records%=
  3837. (RA%)
  3838. $used%=
  3839. (RU%)
  3840. #$percent%=
  3841. (RU%*100/RA%))+"%"
  3842.  Keypress processing --------------------------------------------------
  3843. set_keyboard(wi%,ic%)
  3844. selected(prefsW%,21) 
  3845.  wi% 
  3846.  mainW%:
  3847.  chartype%((ic%+1) 
  3848. -    
  3849.  Leave keyboard status unchanged
  3850. $    
  3851.  2,4:
  3852.  "OS_Byte",202,0,239
  3853. !    
  3854.  "OS_Byte",202,16,111
  3855.  accessW%:
  3856.  uc% 
  3857.  "OS_Byte",202,0,239 
  3858.  "OS_Byte",202,caps%,111
  3859.  "OS_Byte",202,caps%,111
  3860.  "OS_Byte",118
  3861. process_key
  3862.  printing% 
  3863.  indexing% 
  3864.  N$,T%
  3865.  "Wimp_GetCaretPosition",,block%
  3866. 4wi%=block%!0:ic%=block%!4:key_pressed%=block%!24
  3867.  T%=0 
  3868.  LastTable%
  3869.  wi%=tableW%(T%) 
  3870.  Tablenumber%=T%
  3871.  key_pressed% 
  3872. store
  3873. retrieve
  3874.  wi% 
  3875.  mainW%:
  3876. main_press(wi%,ic%)
  3877.  passW%:
  3878. dbox_press(4,18,0,0,0)
  3879.  aclW%:
  3880. dbox_press(9,11,0,0,0)
  3881.  changeW%:
  3882. dbox_press(3,6,queryW%,0,0)
  3883.  tabcreateW%:
  3884. dbox_press(2,3,scrollW%,0,MaxCols%*2+1)
  3885.  scrollW%:
  3886. scroll_press
  3887.  saveW%,savesubW%:
  3888. dbox_press(1,3,0,0,0)
  3889.  tableW%(Tablenumber%):
  3890. table_press(Tablenumber%)
  3891.  printW%:
  3892. dbox_press(20,52,0,0,0)
  3893.  labelW%:
  3894. dbox_press(15,19,0,0,0)
  3895.  createW%:
  3896. create_press
  3897.  accessW%:
  3898. dbox_press(3,2,0,0,0)
  3899.  keyW%:
  3900. dbox_press(31,36,0,0,0)
  3901.  matchW%:
  3902. dbox_press(0,6,0,0,0)
  3903.  moveW%:
  3904. dbox_press(7,11,0,0,0)
  3905.  calcW%:
  3906. dbox_press(1,-1,0,0,0)
  3907.  mergeW%:
  3908. dbox_press(6,7,queryW%,0,0)
  3909.  sizeW%:
  3910. dbox_press(4,5,0,0,0)
  3911.  csvW%:
  3912. dbox_press(9,10,0,0,0)
  3913.  prefsW%:
  3914. dbox_press(39,40,0,0,0)
  3915.  searchW%:
  3916.  key_pressed%=15 
  3917. #    
  3918. search_click(searchW%,9,4)
  3919. !    
  3920. dbox_press(8,10,0,0,0)
  3921.  helpW%:
  3922. dbox_press(7,20,0,0,0)
  3923.  queryW%:
  3924. query_press
  3925.  keypadW%:
  3926. special_press
  3927. query_press
  3928.  window%
  3929. window%=-1
  3930.   window%+=1
  3931.    wi%=actionbutt%(window%,0)
  3932.  wi%=oldquery%
  3933.  key_pressed% 
  3934. mouse(0,0,4,wi%,actionbutt%(window%,1))
  3935. query_click(queryW%,2,4)
  3936. shut_window(wi%):
  3937. set_caret(mainW%,starthere%)
  3938.  398:
  3939.  wi% 
  3940. $    
  3941.  changeW%:
  3942. set_caret(wi%,0)
  3943. $    
  3944.  mergeW%:
  3945. set_caret(wi%,14)
  3946.  399:
  3947.  wi% 
  3948. $    
  3949.  changeW%:
  3950. set_caret(wi%,1)
  3951. $    
  3952.  mergeW%:
  3953. set_caret(wi%,14)
  3954.  385,386,387,388,389,390,391,392,393,401,402,403,404,405,406,407,408,409,417,418,419,420,421,422,423,424,425,433,434.435,436,437,438,439,440,441,458,474,490,506,459,475,491,507:
  3955. button_action(key_pressed%)
  3956.  "Wimp_ProcessKey",key_pressed%
  3957. main_press(wi%,ic%)
  3958. selected(passW%,10) 
  3959.  "Wimp_ProcessKey",key_pressed%:
  3960.  icon%
  3961.  flash% 
  3962. deselect(wi%,field%(flash%)):flash%=
  3963. trim(wi%,ic%)
  3964.  key_pressed%<>392 
  3965. validate(Fieldnumber%,T%,N$)=
  3966.  changed%=
  3967. update_calcs(Fieldnumber%)
  3968.  key_pressed% 
  3969. select_range(1,fields%,
  3970.  len%(Fieldnumber%)>=10 
  3971. +    $Rf%(Fieldnumber%)=
  3972. convert_date(4)
  3973. G    
  3974.  len%(Fieldnumber%)>=8 
  3975.  $Rf%(Fieldnumber%)=
  3976. convert_date(2)
  3977. redraw_icon(wi%,field%(Fieldnumber%))
  3978.  5:template%=1:
  3979. display(key%,-1)
  3980.  "Wimp_GetPointerInfo",,block%:
  3981. show_menu(fieldmenu%,!block%-150,block%!4+16)
  3982. 3  $Query%="":$ChangeTitle%="Field: "+Fieldname$
  3983. position_window(changeW%,0,0,0,0,0,0):
  3984. set_caret(changeW%,0)
  3985. set_up_field_menu
  3986. @  keyfunc$="Index field":$KeyTitle%=keyfunc$+": "+Fieldname$
  3987. shade_key_icons(
  3988. deselect(keyW%,30):
  3989. deselect(keyW%,35):
  3990. deselect(keyW%,37)
  3991. position_window(keyW%,0,0,0,504,0,0):
  3992. set_caret(keyW%,13)
  3993. 0  keyfunc$="Current key":$KeyTitle%=keyfunc$
  3994. set_keydata(key%):
  3995. shade_key_icons(
  3996. position_window(keyW%,0,0,0,504,0,0)
  3997. set_up_field_menu:
  3998. position_window(linkW%,0,0,0,0,0,0)
  3999.  Fieldnumber%=fields% 
  4000. close_window(relateW%)
  4001. display(key%,-1)
  4002.         
  4003.         
  4004. A      Fieldnumber%+=1:
  4005.  Fieldnumber%>fields% 
  4006.  Fieldnumber%=1
  4007. $      c%=chartype%(Fieldnumber%)
  4008. .    
  4009.  len%(Fieldnumber%)>0 
  4010.  (c%<6 
  4011.  c%=8)
  4012. "    icon%=field%(Fieldnumber%)
  4013. set_caret(wi%,icon%)
  4014. ,    
  4015. selected(prefsW%,19) 
  4016. relations
  4017.  filter% 
  4018. P    
  4019.  field%(buttonfield%(0,22))>0 
  4020. filter(mainW%,
  4021. filter(keypadW%,
  4022. match(0,0)
  4023. query_click(queryW%,2,4)
  4024.  9:*Indices
  4025.  16:*JobsDone
  4026.  17:*Tables
  4027.  18:*Resources
  4028.  19:starthere%=field%(Fieldnumber%):
  4029.  Access% 
  4030. set_caret(mainW%,starthere%)
  4031.  len%(Fieldnumber%)>=8 
  4032.     T$=
  4033. $-    
  4034. T$,3,1)=$timesep%:
  4035. T$,6,1)=$timesep%
  4036.     $Rf%(Fieldnumber%)=T$
  4037. &.    
  4038. redraw_icon(wi%,field%(Fieldnumber%))
  4039. clear_selection
  4040. keypad_click(keypadW%,1,4)
  4041. close_it(linkW%):
  4042. close_it(keyW%):
  4043. close_it(csvW%)
  4044.  384:
  4045. match(0,0)
  4046.  394:
  4047. selected(passW%,9) 
  4048. position_window(keypadW%,250,100,0,0,0,0)
  4049.  398:
  4050. 1?    Fieldnumber%+=1:
  4051.  Fieldnumber%>fields% 
  4052.  Fieldnumber%=1
  4053. 2"    c%=chartype%(Fieldnumber%)
  4054.  len%(Fieldnumber%)>0 
  4055.  (c%<6 
  4056.  c%=8)
  4057. 4   icon%=field%(Fieldnumber%)
  4058. set_caret(wi%,icon%)
  4059. selected(prefsW%,19) 
  4060. relations
  4061.  399:
  4062. 9?    Fieldnumber%-=1:
  4063.  Fieldnumber%<1 
  4064.  Fieldnumber%=fields%
  4065. :"    c%=chartype%(Fieldnumber%)
  4066.  len%(Fieldnumber%)>0 
  4067.  (c%<6 
  4068.  c%=8)
  4069. <   icon%=field%(Fieldnumber%)
  4070. set_caret(wi%,icon%)
  4071. selected(prefsW%,19) 
  4072. relations
  4073.  400:
  4074. select(printW%,51):
  4075. deselect(printW%,50)
  4076. position_window(printW%,0,0,0,0,0,0):
  4077. set_caret(printW%,16)
  4078.  416:
  4079. print_this
  4080.  385,386,387,388,389,390,391,392,393,401,402,403,404,405,406,407,408,409,417,418,419,420,421,422,423,424,425,433,434.435,436,437,438,439,440,441,458,474,490,506,459,475,491,507:
  4081. button_action(key_pressed%)
  4082.  "Wimp_ProcessKey",key_pressed%
  4083. selected(prefsW%,21) 
  4084.  chartype%(Fieldnumber%) 
  4085. H-    
  4086.  Leave keyboard status unchanged
  4087. I$    
  4088.  2,4:
  4089.  "OS_Byte",202,0,239
  4090. J!    
  4091.  "OS_Byte",202,16,111
  4092.  "OS_Byte",118
  4093.  "OS_Byte",15,0
  4094. button_action(K%)
  4095. check_change
  4096. button%=
  4097. key_assigned(K%)
  4098.  button% 
  4099.  ### No action ###
  4100. selected(passW%,9) 
  4101. XO    
  4102. invert(keypadW%,button%):
  4103. filter(keypadW%,
  4104. selected(keypadW%,button%))
  4105. Y        
  4106. Z+    ic%=field%(buttonfield%(0,button%))
  4107. [B    
  4108.  ic%>0 
  4109. invert(wi%,ic%):
  4110. filter(wi%,
  4111. selected(wi%,ic%))
  4112.  13,23:
  4113.  button%=23 
  4114.  e%=-1:button%=13 
  4115.  e%=1
  4116. invert(keypadW%,button%)
  4117. selected(passW%,9) 
  4118. a"    
  4119. allow_search(keypadW%,e%)
  4120. bE    
  4121.  field%(buttonfield%(0,button%))>0 
  4122. allow_search(wi%,e%)
  4123. invert(keypadW%,button%)
  4124. shaded(keypadW%,button%) 
  4125. g!    
  4126. invert(keypadW%,button%)
  4127. h&    
  4128. mouse(0,0,4,keypadW%,button%)
  4129. i!    
  4130. invert(keypadW%,button%)
  4131. key_assigned(pressed%)
  4132. p    I%=-1
  4133.   I%+=1
  4134.  I%=23 
  4135.  buttonfield%(1,I%)=pressed%
  4136.  buttonfield%(1,I%)=pressed% 
  4137. dbox_press(ok%,esc%,wi2%,down%,up%)
  4138. trim(wi%,ic%)
  4139.  wi% 
  4140.  accessW%:
  4141.  key_pressed% 
  4142. {M    
  4143. next_writable(wi%,ic%,1,1,wi2%,down%) 
  4144. mouse(0,0,4,wi%,ok%)
  4145. |#    
  4146. mouse(0,0,4,wi%,esc%)
  4147. }7    
  4148.  398:f%=
  4149. next_writable(wi%,ic%,1,0,wi2%,down%)
  4150. ~6    
  4151.  399:f%=
  4152. next_writable(wi%,ic%,-1,0,wi2%,up%)
  4153. +    
  4154.  "Wimp_ProcessKey",key_pressed%
  4155.  key_pressed% 
  4156. selected(prefsW%,41) 
  4157. next_writable(wi%,ic%,1,1,wi2%,down%) 
  4158. mouse(0,0,4,wi%,ok%):
  4159. set_caret(mainW%,starthere%)
  4160. A    
  4161. mouse(0,0,4,wi%,esc%):
  4162. set_caret(mainW%,starthere%)
  4163. 7    
  4164.  398:f%=
  4165. next_writable(wi%,ic%,1,0,wi2%,down%)
  4166. 6    
  4167.  399:f%=
  4168. next_writable(wi%,ic%,-1,0,wi2%,up%)
  4169. #    
  4170.  wi%=tabcreateW% 
  4171.  ic%=0 
  4172. :      $tabcol%=
  4173. (MaxCols%):
  4174. redraw_icon(tabcreateW%,8)
  4175. ;      !block%=scrollW%:
  4176.  "Wimp_GetWindowState",,block%
  4177. =      block%!24=-MaxCols%*44:
  4178.  "Wimp_OpenWindow",,block%
  4179.         
  4180.  385,386,387,388,389,390,391,392,393,401,402,403,404,405,406,407,408,409,417,418,419,420,421,422,423,424,425,433,434.435,436,437,438,439,440,441,458,474,490,506,459,475,491,507:
  4181. $    
  4182. button_action(key_pressed%)
  4183. +    
  4184.  "Wimp_ProcessKey",key_pressed%
  4185. scroll_press
  4186.  row%
  4187. trim(wi%,ic%)
  4188.  key_pressed% 
  4189.  13,398:f%=
  4190. next_writable(wi%,ic%,1,0,tabcreateW%,0)
  4191.  399:f%=
  4192. next_writable(wi%,ic%,-1,0,tabcreateW%,8)
  4193.  "Wimp_ProcessKey",key_pressed%
  4194.  "Wimp_GetCaretPosition",,block%
  4195.  !block%=scrollW% 
  4196.  ic%=block%!4 
  4197.  ic%=0
  4198. row%=ic% 
  4199. 0$tabcol%=
  4200. (row%):
  4201. redraw_icon(tabcreateW%,8)
  4202. 5!block%=scrollW%:
  4203.  "Wimp_GetWindowState",,block%
  4204.  scrollrow%=-(block%!24 
  4205.  row%-scrollrow%>4 
  4206.  block%!24=(4-row%)*44:
  4207.  "Wimp_OpenWindow",,block%
  4208.  row%<scrollrow% 
  4209.  block%!24=-row%*44:
  4210.  "Wimp_OpenWindow",,block%
  4211. table_press(T%)
  4212.  icons%,row%,scrollrow%,visible_rows%
  4213. trim(wi%,ic%)
  4214. icons%=Rows%*(TabFields%+1)
  4215.  key_pressed% 
  4216.  ic%<icons%-1 
  4217.  ic%+=1 
  4218.  ic%=0
  4219.  398:
  4220.  ic%<icons%-TabFields%-1 
  4221.  ic%+=(TabFields%+1) 
  4222.  ic%=ic% 
  4223.  (TabFields%+1)
  4224.  399:
  4225.  ic%>=TabFields%+1 
  4226.  ic%-=(TabFields%+1) 
  4227.  ic%=icons%-TabFields%-1+ic% 
  4228.  (TabFields%+1)
  4229.  "Wimp_ProcessKey",key_pressed%
  4230. set_caret(tableW%(T%),ic%)
  4231. 'row%=(ic% 
  4232.  (TabFields%+1))-NewTab%
  4233. 8!block%=tableW%(T%):
  4234.  "Wimp_GetWindowState",,block%
  4235. -visible_rows%=(block%!16-block%!8) 
  4236.  44-1
  4237.  scrollrow%=-(block%!24 
  4238.  row%-scrollrow%>visible_rows% 
  4239.  block%!24=(visible_rows%-row%)*44:
  4240.  "Wimp_OpenWindow",,block%
  4241.  row%<scrollrow% 
  4242.  block%!24=-row%*44:
  4243.  "Wimp_OpenWindow",,block%
  4244. create_press
  4245. shaded(wi%,29):
  4246. shaded(wi%,18) 
  4247. dbox_press(18,41,0,0,0)
  4248. shaded(wi%,29) 
  4249. dbox_press(29,41,0,0,0)
  4250. menu_select
  4251.  handle%,P%,Q%,I%,M%,field%,umenu%
  4252. &choice1%=!block%:choice2%=block%!4
  4253. (choice3%=block%!8:choice4%=block%!12
  4254.  M%=0 
  4255.  MaxMenus%
  4256.  menuhandle%=usermenu%(M%,1) 
  4257.  umenu%=menuhandle%:field%=usermenu%(M%,0)
  4258.  "Wimp_DecodeMenu",,menuhandle%,block%,choices%
  4259.  I%=1 
  4260.   Q%=
  4261. $choices%,".",P%+1)
  4262. &  choice$(I%)=
  4263. $choices%,P%,Q%-P%)
  4264.   P%=Q%+1
  4265.  "Wimp_GetPointerInfo",,block%
  4266. x%=!block%:y%=block%!4
  4267. redo%=block%!8=1
  4268.  menuhandle% 
  4269.  menu%(0):
  4270. act_on_icon_bar_menu
  4271.  menu%(1):
  4272. act_on_main_menu
  4273.  menu%(9):
  4274. act_on_create_menu
  4275.  menu%(17):
  4276. act_on_table_menu(choice$(1))
  4277.  menu%(18):
  4278. act_on_text_menu
  4279.  menu%(15):
  4280. act_on_csv_sep
  4281.  menu%(20):
  4282. act_on_csv_term
  4283.  menu%(8),menu%(11),menu%(14),menu%(16),menu%(19):
  4284. act_on_fieldtype_menus
  4285.  menu%(23):
  4286. act_on_keypad_menu
  4287.  tablemenu%::
  4288. act_on_menu_of_tables
  4289.  fieldmenu%:
  4290. act_on_menu_of_fields
  4291.  umenu%:
  4292. 2  menic%=umenu%+28+choice1%*24:flags%=menic%!8
  4293.  (flags% 
  4294.  (1<<8))=0 
  4295. !    choice$=
  4296. $(menic%+12),12)
  4297.  choice$=$(menic%!12)
  4298.  fix%(field%)>0 
  4299.  choice$=
  4300. fix_point(choice$,field%)
  4301. (choice$)<=len%(field%) 
  4302.     $Rf%(field%)=choice$
  4303. +    
  4304. redraw_icon(mainW%,field%(field%))
  4305. )    
  4306. set_caret(mainW%,field%(field%))
  4307. )    
  4308. softerror(""""+choice$+"""",7)
  4309. special_select
  4310.  quit% 
  4311.  redo% 
  4312. show_menu(menuhandle%,menux%,menuy%)
  4313. act_on_main_menu
  4314.  choice$(1) 
  4315.  "CSV options"
  4316.   $CSVTitle%=choice$(1)
  4317. icon_bit(22,csvW%,0,
  4318. text(csvW%,9)="Accept"
  4319. position_window(csvW%,x%-350,y%-180,700,390,0,0)
  4320.  "Miscellaneous":
  4321. act_on_misc_menu
  4322.  "Print":
  4323. act_on_print_menu
  4324.  "Validation":
  4325. act_on_validation_menu
  4326.  "Current key":
  4327. /  $KeyTitle%=choice$(1):keyfunc$=choice$(1)
  4328. set_keydata(key%):
  4329. shade_key_icons(
  4330. position_window(keyW%,x%-284,y%-252,0,504,0,0)
  4331.  "Show keypad":
  4332. selected(passW%,9) 
  4333. position_window(keypadW%,-1,-1,0,0,0,0)
  4334.  "Export subset":
  4335. ?  export%=
  4336. :$SubTitle%="Export subset":savefunc$=choice$(1)
  4337. /  $SubName%=$database%+".PrintJobs.!Subset"
  4338. /  $SubSprite%="snew_appl;Pptr_hand,12,8;R2"
  4339.   $Query%=""
  4340. position_window(savesubW%,x%-244,y%-161,0,0,0,0):
  4341. set_caret(savesubW%,2)
  4342.  "Export CSV":
  4343.     7  $SubTitle%="Export CSV file":savefunc$=choice$(1)
  4344.  sep$="," 
  4345.  t$="dfe":f$="CSV" 
  4346.  t$="fff":f$="Sep"
  4347. 2  $SubName%=$database%+".PrintJobs."+f$+"file"
  4348. 2  $SubSprite%="sfile_"+t$+";Pptr_hand,12,8;R2"
  4349.   $Query%=""
  4350. position_window(savesubW%,x%-244,y%-161,0,0,0,0):
  4351. set_caret(savesubW%,2)
  4352.  "Undo changes":
  4353. restore_rec
  4354.  "Help":
  4355.  "Wimp_StartTask","<Pbase$Dir>.!Help"
  4356. act_on_field_menu
  4357. act_on_misc_menu
  4358.  choice$(2) 
  4359.  "Move/delete":
  4360. icon_bit(22,moveW%,6,
  4361. deselect(moveW%,
  4362. selected_esg(moveW%,1)):
  4363. select(moveW%,2)
  4364.   $Query%=""
  4365. position_window(moveW%,x%-253,y%-232,0,0,0,0):
  4366. set_caret(queryW%,0)
  4367.  "Set passwords":
  4368. position_window(passW%,x%-213,y%-388,0,0,0,0):
  4369. set_caret(passW%,2)
  4370.  "Edit template":template%=1:
  4371. display(key%,-1)
  4372.  "Name subfile":
  4373.  choice3% 
  4374. !H    P%=
  4375. $RecInfo%,"Record")-1:$RecInfo%=$Subfilename%+
  4376. $RecInfo%,P%)
  4377. "&    $Subfile%(file%)=$Subfilename%
  4378. asterisk(
  4379. act_on_print_menu
  4380.  choice$(2) 
  4381.  "Match":
  4382. match(x%-396,y%-131)
  4383.  "Show resources":*Resources
  4384.  "Options":
  4385. select(printW%,51):
  4386. deselect(printW%,50)
  4387. position_window(printW%,x%-458,y%-401,0,0,0,0):
  4388. set_caret(printW%,16)
  4389.  "Save query":
  4390. 0-  $SaveName%=$database%+".PrintRes.Query"
  4391. 12  savefunc$=choice$(2):
  4392. save_click(saveW%,1,4)
  4393.  "Save selection":
  4394. 31  $SaveName%=$database%+".PrintRes.Selection"
  4395. 42  savefunc$=choice$(2):
  4396. save_click(saveW%,1,4)
  4397.  "Show jobs done":*JobsDone
  4398.  "Clear selection":
  4399. clear_selection
  4400.  "Select all":
  4401. select_range(1,fields%,
  4402.  "Numeric fields":
  4403. match(x%-396,y%-131)
  4404. act_on_validation_menu
  4405.  choice$(2) 
  4406.  "Create table":
  4407. @D  $
  4408. text(tabcreateW%,0)="":$
  4409. text(tabcreateW%,1)="":$tabcol%="0"
  4410.  I%=0 
  4411.  MaxCols%*2+1
  4412.     $
  4413. text(scrollW%,I%)=""
  4414. set_icon_cols(tabcreateW%,13,&28)
  4415. set_icon_cols(tabcreateW%,14,&07)
  4416. position_window(tabcreateW%,x%-241,y%-301,0,0,0,0):
  4417. set_caret(tabcreateW%,0)
  4418.  "Display table":
  4419.  choice3%>=0 
  4420.     Tablenumber%=choice3%
  4421. J!    
  4422. show_table(Tablenumber%)
  4423.  "Show table files":*Tables
  4424. act_on_field_menu
  4425.  choice$(2) 
  4426.  "Index field":
  4427. S=  keyfunc$=choice$(2):$KeyTitle%=keyfunc$+": "+Fieldname$
  4428. shade_key_icons(
  4429. deselect(keyW%,30):
  4430. deselect(keyW%,35):
  4431. deselect(keyW%,37)
  4432. position_window(keyW%,x%-284,y%-252,0,504,0,0):
  4433. set_caret(keyW%,13)
  4434.  "Analyse index":
  4435. analyse(
  4436. is_a_key(Fieldnumber%))
  4437.  "Analyse months":
  4438. analyse(-1)
  4439.  "Link to table":
  4440. position_window(linkW%,x%-350,y%-129,0,0,0,0)
  4441.  "Calculations","Combine fields":
  4442. position_window(calcW%,0,0,0,0,0,0):
  4443. set_caret(calcW%,0)
  4444.  "Global changes":$Query%="":
  4445. position_window(changeW%,x%-252,y%-214,0,0,0,0):
  4446. set_caret(changeW%,0)
  4447.  "Start editing":
  4448. ]%  starthere%=field%(Fieldnumber%)
  4449.  Access% 
  4450. set_caret(mainW%,starthere%)
  4451.  "Remove external":
  4452.  chartype%(Fieldnumber%)=35 
  4453.  link$(Fieldnumber%)="" 
  4454. delete_blob(Fieldnumber%,object$,mainW%,field%(Fieldnumber%))
  4455.  chartype%(Fieldnumber%)=40 
  4456. bM    
  4457. show_picture(Fieldnumber%):
  4458. redraw_icon(mainW%,field%(Fieldnumber%))
  4459.  "Undo changes":
  4460. restore(Fieldnumber%,"",-1)
  4461. act_on_keypad_menu
  4462.  choice$(1) 
  4463.  "Defaults":
  4464. load_fkeys("DFkeys")
  4465.  "Save choices":
  4466. save_fkeys
  4467.  "List keys":
  4468. list_fkeys
  4469. act_on_csv_sep
  4470.  choice$(1) 
  4471.  "Comma":sep$=","
  4472.  "TAB":sep$=
  4473.  "CR":sep$=
  4474.  "LF":sep$=
  4475.  sep$=$Delim%
  4476. tick_one(menuhandle%,0,3,choice1%)
  4477. text(csvW%,14)=choice$(1)
  4478. redraw_icon(csvW%,14)
  4479. act_on_csv_term
  4480.  choice$(1) 
  4481.  "CR":term$=
  4482.  "LF":term$=
  4483.  "CR LF":term$=
  4484. (13)+
  4485.  "LF CR":term$=
  4486. (10)+
  4487.  "CR CR":term$=
  4488. (13)+
  4489.  "LF LF":term$=
  4490. (10)+
  4491. :term$=$Termin%
  4492. tick_one(menuhandle%,0,5,choice1%)
  4493. text(csvW%,15)=choice$(1)
  4494. redraw_icon(csvW%,15)
  4495. act_on_text_menu
  4496. choice$(1),4) 
  4497.  "Save":
  4498.   $SaveName%=TextName$
  4499. 0  $SaveSprite%="sfile_fff;Pptr_hand,12,8;R2"
  4500. 2  savefunc$=choice$(1):
  4501. save_click(saveW%,1,4)
  4502.  "Sort":
  4503. sort_list(sort_textcol%)
  4504.  "Scra":
  4505. lose_list
  4506. act_on_create_menu
  4507.  choice$(1) 
  4508.  "Design field":
  4509. position_window(createW%,x%-425,y%-320,0,0,0,0):
  4510. set_caret(createW%,4)
  4511.  "Save form file":
  4512. #  $SaveName%=$database%+".Form"
  4513. 2  savefunc$=choice$(1):
  4514. save_click(saveW%,1,4)
  4515.  "Default database":
  4516. save_form($database%+".Form")
  4517. first_field>0 
  4518. default_key
  4519. #    
  4520. defaults($database%,100,0)
  4521. softerror("",35)
  4522.  "Primary key":
  4523. %  fieldmenu%=
  4524. field_menu(fields%)
  4525. >  starthere%=field%(
  4526. first_field):Lastwritable%=starthere%
  4527.   $KeyTitle%=choice$(1)
  4528.   keyfunc$=choice$(1)
  4529.    case%(0)=
  4530. set_keydata(0)
  4531. shade_key_icons(
  4532. icon_bit(22,keyW%,37,
  4533. position_window(keyW%,x%-284,y%-252,0,504,0,0):
  4534. set_caret(keyW%,13)
  4535.  "Quit design":
  4536. adjust_on(
  4537. save_form($database%+".Form")
  4538. save_calcs
  4539. get_it_in($database%)
  4540. act_on_fieldtype_menus
  4541. "fieldtype%=firsttype%+choice1%
  4542. tick_one(menuhandle%,0,lasttype%-firsttype%,choice1%)
  4543. update_box
  4544. act_on_menu_of_tables
  4545. Tablenumber%=choice1%
  4546. $$Tablename%=table$(Tablenumber%)
  4547. tick_one(menuhandle%,0,LastTable%,choice1%)
  4548. redraw_icon(linkW%,0)
  4549. act_on_menu_of_fields
  4550.  fieldfunc$ 
  4551.  "create":
  4552. design_field(2,choice1%*2+1,
  4553.  "help":
  4554.   Match_tag%=choice1%+1
  4555. text(helpW%,0)=Tag$(Match_tag%):
  4556. redraw_icon(helpW%,0)
  4557. tick_one(fieldmenu%,0,fields%-1,choice1%)
  4558.  "0","1","2","3":
  4559.   keyfield%=
  4560. (fieldfunc$)
  4561.  keyfunc$<>"Current key" 
  4562. (    
  4563. ticked(fieldmenu%,choice1%) 
  4564. O      keyfield%(keyfield%)=0:
  4565. kcycle(keyfield%(keyfield%),4*keyfield%+12,0)
  4566.       
  4567. X      keyfield%(keyfield%)=choice1%+1:
  4568. kcycle(keyfield%(keyfield%),4*keyfield%+12,0)
  4569.         
  4570. act_on_table_menu(ch$)
  4571. *Tablenumber%=
  4572. table_number($menu%(17))
  4573.  ch$="Save":
  4574. 4  $SaveName%=$database%+".ValTables."+$menu%(17)
  4575. 4  savefunc$="Save table":
  4576. save_click(saveW%,1,4)
  4577.  ch$="Clear":
  4578. clear_table(Tablenumber%)
  4579.  ch$="Print":
  4580. print_table(Tablenumber%)
  4581. ch$,4)="Sort":
  4582. sort_table(Tablenumber%,sort_tabcol%)
  4583.  ch$="Undo all":
  4584. restore_table(Tablenumber%)
  4585.  ch$="Undo change":
  4586. restore_tabfield
  4587.  ch$="Save as CSV":
  4588. 4  $SaveName%=$database%+".PrintJobs."+$menu%(17)
  4589. 1  savefunc$="Save table as CSV":writetable%=
  4590. save_click(saveW%,1,4)
  4591.  ch$="Modify":
  4592. modify_table(Tablenumber%,tabcreateW%)
  4593. act_on_icon_bar_menu
  4594.  choice$(1) 
  4595.  "Help":
  4596.  "Wimp_StartTask","<Pbase$Dir>.!Help"
  4597.  "Utilities":
  4598.  choice$(2) 
  4599.  "New primary key":
  4600.     $KeyTitle%=choice$(2)
  4601. +    keyfunc$=choice$(2):
  4602. set_keydata(0)
  4603.  (present% 
  4604.  2)=2 
  4605. /      
  4606. select(keyW%,32):
  4607. deselect(keyW%,33)
  4608. ;      
  4609. icon_bit(22,keyW%,32,
  4610. icon_bit(22,keyW%,33,
  4611.       
  4612. /      
  4613. select(keyW%,33):
  4614. deselect(keyW%,32)
  4615. ;      
  4616. icon_bit(22,keyW%,32,
  4617. icon_bit(22,keyW%,33,
  4618.         
  4619. 4    
  4620. shade_key_icons(
  4621. icon_bit(22,keyW%,37,
  4622. L    
  4623. position_window(keyW%,x%-284,y%-303,0,606,0,0):
  4624. set_caret(keyW%,13)
  4625.  "New record format":
  4626. close_window(reformW%)
  4627. 5    reform$="Reformat":$
  4628. text(reformW%,6)=reform$
  4629. *    $RefmTitle%="Change record format"
  4630. "    
  4631. icon_bit(22,reformW%,6,
  4632. 7    
  4633. position_window(reformW%,x%-237,100,0,236,0,0)
  4634.         
  4635.  "Adjust format":
  4636. adjust_on(
  4637. open_window(mainW%)
  4638. display(key%,-1)
  4639. 3    
  4640. alter_flags(&07016711,&07006535,&1700653F)
  4641.  "Merge database":
  4642. close_window(reformW%)
  4643. 2    reform$="Merge":$
  4644. text(reformW%,6)=reform$
  4645. $    $RefmTitle%="Merge database"
  4646. "    
  4647. icon_bit(22,reformW%,6,
  4648.     7    
  4649. position_window(reformW%,x%-237,100,0,400,0,0)
  4650. (    
  4651.  "Balance index":
  4652. balance(key%)
  4653.  "Print index":
  4654.  choice$(3) 
  4655.       
  4656.  "Complete":
  4657. '      
  4658. print_tree(key%,file%,"ALL")
  4659.       
  4660.  "Totals only":
  4661. *      
  4662. print_tree(key%,file%,"TOTALS")
  4663.         
  4664. -    
  4665.  "Find duplicates":
  4666. duplicates(key%)
  4667.  "Close database":
  4668.  "Preferences":
  4669. position_window(prefsW%,x%-371,150,0,0,0,0):
  4670. set_caret(prefsW%,1)
  4671.  "Quit":quit%=
  4672. init_drag(wi%,ic%,dragtype%)
  4673. getscreensize(W%,H%,V%)
  4674. !block%=wi%
  4675.  "Wimp_GetWindowState",,block%
  4676. ysize%=block%!16-block%!8
  4677. x%=block%!4-block%!20
  4678. y%=block%!16-block%!24
  4679. block%!4=ic%
  4680.  "Wimp_GetIconState",,block%
  4681. block%!8+=x%:minx%=block%!8
  4682. $!block%!12+=y%:miny%=block%!12
  4683. %!block%!16+=x%:maxx%=block%!16
  4684. &!block%!20+=y%:maxy%=block%!20
  4685.  dragtype%=6 
  4686. (5  block%!24=2*minx%-maxx%:block%!36=2*maxy%-miny%
  4687.  block%!24=0:block%!36=H%
  4688. block%!28=0
  4689. block%!32=W%
  4690. !block%=0
  4691. block%!4=dragtype%
  4692. dragging%=
  4693.  wi% 
  4694.  saveW%,savesubW%:
  4695.  wi%=saveW% 
  4696.  sprite$=
  4697. $SaveSprite%,2,8) 
  4698.  sprite$=
  4699. $SubSprite%,2,8)
  4700.  "DragASprite_Start",&C5,1,sprite$,block%+8
  4701.  "Wimp_DragBox",,block%
  4702.  wi%=mainW% 
  4703.  ficon%=ic%
  4704. end_drag(start%,end%)
  4705.  wi%,ic%
  4706. dragging%=
  4707. datasize%=end%-start%
  4708.  "Wimp_GetPointerInfo",,block%
  4709. wi%=block%!12:ic%=block%!16
  4710. @7block%!32=block%!4:block%!28=block%!0:block%!24=ic%
  4711. A+block%!20=wi%:block%!24=ic%:block%!16=1
  4712. B3block%!12=0:block%!36=datasize%:block%!40=Type%
  4713.  design% 
  4714. adjust_field(dragbutt%)
  4715.  Filename$<>"" 
  4716.  wi%<>mainW% 
  4717. G%    $(block%+44)=
  4718. leaf(Filename$)
  4719.     !block%=60
  4720. I/    
  4721.  "Wimp_SendMessage",17,block%,wi%,ic%
  4722.     ramptr%=start%
  4723. K     
  4724.  "Wimp_CreateMenu",,-1
  4725. encrypt(S$,Z%)
  4726.  I%,R%
  4727. (-12817)
  4728.  I%=1 
  4729. S$,I%,1)>"@" 
  4730.     R%=
  4731. (58)-1
  4732.  R%=58-R%
  4733. W1    
  4734. S$,I%,1)=
  4735. S$,I%,1))-65+R%) 
  4736.  58+65)
  4737. leaf(s$)
  4738. s2$=""
  4739. s$)<>"." 
  4740.  s$<>""
  4741.   s2$=
  4742. s$)+s2$
  4743.   s$=
  4744. dbasepath$=
  4745.  Message handling ----------------------------------------------------
  4746. not_acknowledged
  4747.  block%!16 
  4748.  DataOpen failed, so run file
  4749.  block%!8=Impref% 
  4750.  Imp_wait%=
  4751.  "Wimp_StartTask",$(block%+44)
  4752.  RAMTransmit failed
  4753.  merging% 
  4754.  moan_err%,
  4755. msg("Err39")
  4756.  At this point, the message ought to have been sent by us, so check it
  4757.  Very bizarre situation if you get this error (!!)
  4758.  block%!8<>myref% 
  4759.  moan_err%,"Reference fields mismatch (msglost/DataLoad)"
  4760.  If transfer marked as temporary, delete scrap file
  4761.  block%!36=-1 
  4762.  "OS_File",6,block%+44
  4763.  moan_err%,
  4764. msg("Err39")
  4765.  &80142:
  4766.  moan_err%,
  4767. msg("Err90")
  4768.  ### Attempt to print directly when no driver installed ###
  4769. message
  4770.  task%,ref%,ftype%,filename$,w%,i%,x%,y%
  4771. ~ task%=block%!4:ref%=block%!8
  4772.  block%!16 
  4773.  0:quit%=
  4774.  ### DataSave ###
  4775.  task%<>mytask% 
  4776.  present%=7 
  4777.     datasize%=block%!36
  4778.  block%!40 
  4779.        
  4780.  &fff,&ff9,&aff,&dfe:
  4781.       myref%=ref%
  4782. >      block%!0=256:block%!12=ref%:block%!16=2:block%!36=-1
  4783. *      $(block%+44)="<Wimp$Scrap>"+
  4784. /      
  4785.  "Wimp_SendMessage",17,block%,task%
  4786.         
  4787.  ### DataSaveAck ###
  4788.   block%!12=ref%
  4789.  "Wimp_SendMessage",19,block%,task%
  4790. 3  ftype%=block%!40:filename$=
  4791. getstr(block%+44)
  4792.  filename$<>"" 
  4793. ;    w%=block%!20:i%=block%!24:x%=block%!28:y%=block%!32
  4794. L    
  4795. save(filename$,Type%,Start%,End%):
  4796. write_log(-1,filename$+" saved")
  4797. *    block%!0=(44+
  4798. filename$+1+3) 
  4799. V    block%!12=ref%:block%!16=3:block%!20=w%:block%!24=i%:block%!28=x%:block%!32=y%
  4800. 0    
  4801.  "OS_File",5,filename$ 
  4802.  ,,,,block%!36
  4803. 4    block%!40=ftype%:$(block%+44)=filename$+
  4804. -    
  4805.  "Wimp_SendMessage",18,block%,task%
  4806.     myref%=block%!8
  4807.  "Wimp_CreateMenu",,-1
  4808.  ### DataLoad ###
  4809. ,  myref%=block%!12:f$=
  4810. getstr(block%+44)
  4811. get_it_in(f$)
  4812.  myref%<>0 
  4813.  "OS_CLI","Remove <Wimp$Scrap>"
  4814.  ### DataLoadAck ###
  4815.  block%!12=Impref% 
  4816.  merging% 
  4817. start_merge
  4818.  ### DataOpen - response to file double click ###
  4819.  block%!40 
  4820.  &7f1,&7f3,&7f4,&7f5:
  4821.  present%=7 
  4822. N      block%!0=20:block%!12=ref%:block%!16=4:block%!20=mainW%:block%!24=-1
  4823. )      
  4824.  "Wimp_SendMessage",17,block%
  4825. (      
  4826. get_it_in(
  4827. getstr(block%+44))
  4828.         
  4829.  &2000:
  4830.  kill% 
  4831.  present%=0 
  4832. 2      
  4833.  ### Is it a Powerbase application? ###
  4834. *      f$=
  4835. getstr(block%+44)+".Colours"
  4836. '      
  4837.  "OS_File",5,f$ 
  4838.  d%,,type%
  4839. !      type%=(type%>>8) 
  4840.  &fff
  4841.       
  4842.  d%=1 
  4843.  type%=&ffd 
  4844. 2        block%!0=20:block%!12=ref%:block%!16=4
  4845. 4        
  4846.  "Wimp_SendMessage",17,block%,block%!4
  4847. *        
  4848. get_it_in(
  4849. getstr(block%+44))
  4850.       
  4851.         
  4852.  savefunc$ 
  4853.  "Save as text","Save text","Save sprite","Save draw","Save query","Save selection","Save table","Export selected":
  4854. ram_transmit
  4855.  10: 
  4856.  ### Desktop boot file
  4857. F    
  4858.  "OS_GSTrans","Run <PBase$Dir>",block%+&100,&f00 
  4859.  ,bootcmd$
  4860. #block%!20,bootcmd$
  4861.  &502:
  4862. help_message(block%!32,block%!36)
  4863.  &400C2:
  4864. getscreensize(ScreenWidth%,ScreenHeight%,Vpix%)
  4865.  &400C0:
  4866. message_menu_select
  4867.  &80140:
  4868.  ### PrintFile - ignore ###
  4869. ram_transmit
  4870.  datasize%>block%!24 
  4871.  tosend%=block%!24 
  4872.  tosend%=datasize%
  4873.  "Wimp_TransferBlock",mytask%,ramptr%,block%!4,block%!20,tosend%
  4874. block%!24=tosend%
  4875. datasize%-=tosend%
  4876. ramptr%+=tosend%
  4877. block%!12=block%!8
  4878. block%!16=7
  4879.  "Wimp_SendMessage",18+(datasize%=0),block%,block%!4
  4880. message_menu_select
  4881.  P%,Q%,I%
  4882. keyfunc$="":savefunc$=""
  4883. 5handle%=block%!20:xmin%=block%!24:ymax%=block%!28
  4884.  "Wimp_DecodeMenu",,menuhandle%,block%+32,choices%
  4885.  I%=1 
  4886.   Q%=
  4887. $choices%,".",P%+1)
  4888. &  choice$(I%)=
  4889. $choices%,P%,Q%-P%)
  4890.   P%=Q%+1
  4891.  menuhandle% 
  4892.  menu%(0):
  4893.  choice$(1) 
  4894.  "New database":
  4895.     $SaveName%="!DataBase"
  4896. 2    $SaveSprite%="snew_appl;Pptr_hand,12,8;R2"
  4897.     savefunc$=choice$(1)
  4898.  menu%(1):
  4899.  choice$(1) 
  4900. 6    
  4901.  "Information":
  4902. count(key%,RU%):
  4903. update_stats
  4904.  "Print":
  4905.  choice$(2) 
  4906.       
  4907.  "Save query":
  4908. 1      $SaveName%=$database%+".PrintRes.Query"
  4909. 4      $SaveSprite%="sfile_7f4;Pptr_hand,12,8;R2"
  4910.       
  4911.  "Save selection":
  4912. 5      $SaveName%=$database%+".PrintRes.Selection"
  4913. 4      $SaveSprite%="sfile_7f3;Pptr_hand,12,8;R2"
  4914.         
  4915.     savefunc$=choice$(2)
  4916.  "Miscellaneous":
  4917.  choice$(2) 
  4918.       
  4919.  "Colours":
  4920.       ncol%()=fcol%()
  4921.       
  4922.  I%=0 
  4923. .        
  4924. set_icon_cols(colW%,I%,ncol%(I%))
  4925.       
  4926.         
  4927.  "Export selected":
  4928. 3    $SaveName%=$database%+".PrintJobs.Selected"
  4929. 2    $SaveSprite%="sfile_fff;Pptr_hand,12,8;R2"
  4930.     savefunc$=choice$(1)
  4931.  menu%(9):
  4932.  choice$(1) 
  4933.  "Save form file":
  4934. %    $SaveName%=$database%+".Form"
  4935. 2    $SaveSprite%="sfile_7f2;Pptr_hand,12,8;R2"
  4936.     savefunc$=choice$(1)
  4937.  menu%(17):
  4938.  choice$(1) 
  4939.  "Save":
  4940. 6    $SaveName%=$database%+".ValTables."+$menu%(17)
  4941. 2    $SaveSprite%="sfile_7f1;Pptr_hand,12,8;R2"
  4942.     savefunc$="Save table"
  4943.  "Save as CSV":
  4944. 6    $SaveName%=$database%+".PrintJobs."+$menu%(17)
  4945. 2    $SaveSprite%="sfile_dfe;Pptr_hand,12,8;R2"
  4946. 3    savefunc$="Save table as CSV":writetable%=
  4947.  menu%(18):
  4948.  choice$(1) 
  4949.  "Save as text":
  4950.     $SaveName%=TextName$
  4951. 2    $SaveSprite%="sfile_fff;Pptr_hand,12,8;R2"
  4952.     savefunc$=choice$(1)
  4953.  "Wimp_CreateSubMenu",,handle%,xmin%,ymax%
  4954. help_message(wi%,ic%)
  4955.  T%=0 
  4956.  LastTable%
  4957.  wi%=tableW%(T%) 
  4958.  Tablenumber%=T%
  4959.  wi% 
  4960. help("HelpPbase")
  4961.  listW%:
  4962. help("HelpList")
  4963.  tableW%(Tablenumber%):
  4964. help("HelpTable")
  4965.  mainW%:
  4966.  ic%<0:
  4967. help("main?")
  4968.  (ic% 
  4969.  2)=1:
  4970. &=    field%=(ic%+1) 
  4971. help("main"+
  4972. (chartype%(field%)))
  4973.  pselectW%:
  4974. help("Pselect")
  4975.  infoW%:
  4976. help("info"+
  4977. (ic%))
  4978.  miscW%:
  4979. help("misc"+
  4980. (ic%))
  4981.  relateW%:
  4982. help("relate"+
  4983. (ic%))
  4984.  accessW%:
  4985. help("access"+
  4986. (ic%))
  4987.  keypadW%:
  4988. help("keypad"+
  4989. (ic%))
  4990.  searchW%:
  4991. help("search"+
  4992. (ic%))
  4993.  filterW%:
  4994. help("filter"+
  4995. (ic%))
  4996.  queryW%:
  4997. help("query"+
  4998. (ic%))
  4999.  moveW%:
  5000. help("move"+
  5001. (ic%))
  5002.  calcW%:
  5003. help("calc"+
  5004. (ic%))
  5005.  sizeW%:
  5006. help("size"+
  5007. (ic%))
  5008.  matchW%:
  5009. help("match"+
  5010. (ic%))
  5011.  tabcreateW%:
  5012. help("tabcreate"+
  5013. (ic%))
  5014.  changeW%:
  5015. help("change"+
  5016. (ic%))
  5017.  passW%:
  5018. help("passwd"+
  5019. (ic%))
  5020.  aclW%:
  5021. help("acl"+
  5022. (ic%))
  5023.  saveW%:
  5024. help("save"+
  5025. (ic%))
  5026.  savesubW%:
  5027. help("savesub"+
  5028. (ic%))
  5029.  printW%:
  5030. help("print"+
  5031. (ic%))
  5032.  labelW%:
  5033. help("label"+
  5034. (ic%))
  5035.  createW%:
  5036. help("create"+
  5037. (ic%))
  5038.  scrollW%:
  5039. help("scroll")
  5040.  prefsW%:
  5041. help("prefs"+
  5042. (ic%))
  5043.  csvW%:
  5044. help("csv"+
  5045. (ic%))
  5046.  fkeyW%:
  5047. help("fkey"+
  5048. (ic%))
  5049.  helpW%:
  5050. help("help"+
  5051. (ic%))
  5052.  keyW%:
  5053. help("key"+
  5054. (ic%))
  5055.  colW%:
  5056. help("col"+
  5057. (ic%))
  5058.  linkW%:
  5059. help("link"+
  5060. (ic%))
  5061.  reformW%:
  5062. help("reform"+
  5063. (ic%))
  5064.  mergeW%:
  5065. help("merge"+
  5066. (ic%))
  5067. help(token$)
  5068. !block%=256
  5069. block%!12=ref%
  5070. block%!16=&503
  5071. $(block%+20)=
  5072. msg(token$)
  5073.  "Wimp_SendMessage",17,block%,block%!4
  5074.  File saving --------------------------------------------------------
  5075. export_selected(Form$)
  5076.  I%,F%,P%,F$
  5077. extend_named_sliding_block(textanchor%,Length%+fields%+3)
  5078. P%=!textanchor%
  5079.  I%=1 
  5080. (Form$)-1 
  5081.   F%=
  5082. fnum(
  5083. Form$,I%,2))
  5084.   F$=$Rf%(F%)+
  5085.   $P%=F$:P%+=
  5086. ^*Start%=!textanchor%:End%=P%:Type%=&fff
  5087. save_all_tables
  5088.  "Hourglass_On"
  5089. Tablenumber%=0
  5090.  Tablenumber%<=LastTable%
  5091. e6  f$=$database%+".ValTables."+table$(Tablenumber%)
  5092. fa  t$=
  5093. table_info(Tablenumber%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  5094. gE  Start%=!tabanchor%(Tablenumber%):End%=Start%+offset%+Rows%*Rec%
  5095. save(f$,&7f1,Start%,End%)
  5096.   Tablenumber%+=1
  5097.  "Hourglass_Percentage",Tablenumber%*100 
  5098.  (LastTable%+1)
  5099.  "Hourglass_Off"
  5100. save(f$,ft%,start%,end%)
  5101.  ft% 
  5102.   leaf$=
  5103. leaf(f$)
  5104. leaf$,1)<>"!" 
  5105.  leaf$="!"+leaf$
  5106. t"  f$=dbasepath$+"."+
  5107. leaf$,10)
  5108.  "OS_File",8,f$
  5109.  "OS_File",8,f$+".Indices"
  5110.  "OS_File",8,f$+".ValTables"
  5111.  "OS_File",8,f$+".PrintRes"
  5112.  "OS_File",8,f$+".PrintJobs"
  5113.  "OS_CLI","Copy <PBase$Dir>.Resources.Temp.!Run "+f$+".!Run ~C~V"
  5114.  "OS_CLI","Copy <PBase$Dir>.Resources.Colours "+f$+".Colours ~C~V"
  5115. copy_database_spritefile(f$,
  5116. leaf(f$))
  5117. ~$    
  5118.  export%:
  5119. export_subset(f$)
  5120.  csvconv%:
  5121.  !formanchor%=0 
  5122. 4      
  5123. extend_named_sliding_block(formanchor%,0)
  5124.       Fptr%=!formanchor%
  5125. "      fields%=0:Fieldnumber%=0
  5126. "      fields%=
  5127. get_form(Fptr%)
  5128.         
  5129. lit(menu%(0),1,
  5130. get_it_in(f$)
  5131. open_window(mainW%)
  5132.  !formanchor%=0 
  5133. 4      
  5134. extend_named_sliding_block(formanchor%,0)
  5135.       Fptr%=!formanchor%
  5136. "      fields%=0:Fieldnumber%=0
  5137.         
  5138. close_window(saveW%)
  5139.  &7f2:
  5140. save_form(f$)
  5141.  &7f5:
  5142. save_options(printW%,f$)
  5143.  &dfe:
  5144.  writetable% 
  5145. ,    
  5146. write_table_as_csv(Tablenumber%,f$)
  5147. write_csv(f$)
  5148.  savetofile%:
  5149.     texthandle%=
  5150. "    
  5151. do_it(Search$,displayed%)
  5152. +    
  5153.  "OS_File",10,f$,ft%,,start%,end%
  5154. )    
  5155. scrap_sliding_block(saveanchor%)
  5156. ramwarn%=
  5157. getstr(p%)
  5158.  ?p%>31
  5159.   p$+=
  5160. (?p%)
  5161.   p%+=1
  5162.  Validation tables ----------------------------------------------------
  5163. tabcreate_click(wi%,ic%,b%)
  5164.  I%,Rows%,Rec%,L%,TabFields%,head$,tablen%,width$,max%,row%,y%,headlen%,col%,z%,lim%
  5165.  ic%=3 
  5166. text(wi%,2)="Create":
  5167. close_it(wi%):
  5168. set_caret(mainW%,starthere%):
  5169.  "Hourglass_Smash":
  5170. wimp_error(
  5171.  (b% 
  5172.  %111)=4 
  5173.  z%=1 
  5174.  z%=-1
  5175.  %111 
  5176.  1,4:
  5177.  ic% 
  5178.     row%=
  5179. ($tabcol%)
  5180.  row%>MaxCols% 
  5181. &      
  5182. softerror(
  5183. (MaxCols%+1),42)
  5184.       row%=MaxCols%
  5185.       $tabcol%=
  5186. (row%)
  5187.       
  5188. redraw_icon(wi%,8)
  5189.         
  5190. #    
  5191. set_caret(scrollW%,row%*2)
  5192. )    
  5193.  row%<3 
  5194.  y%=0 
  5195.  y%=-(row%-2)*44
  5196. 9    !block%=scrollW%:
  5197.  "Wimp_GetWindowState",,block%
  5198. 1    block%!24=y%:
  5199.  "Wimp_OpenWindow",,block%
  5200.  13,14:
  5201. @    col%=
  5202. get_icon_cols(wi%,ic%):fg%=col% 
  5203.  16:bg%=col% 
  5204. I    
  5205. selected(wi%,11) 
  5206.  fg%=(fg%+z%+16) 
  5207.  bg%=(bg%+z%+16) 
  5208. *    
  5209. set_icon_cols(wi%,ic%,fg%+bg%*16)
  5210.  LastTable%=MaxTabs% 
  5211. &      
  5212. softerror(
  5213. (MaxTabs%+1),32)
  5214.       
  5215. L      start$="new"+
  5216. get_icon_cols(wi%,13)*256+
  5217. get_icon_cols(wi%,14))
  5218. E      name$=$
  5219. text(wi%,0):
  5220.  name$="" 
  5221.  moan_err%,
  5222. msg("Err103")
  5223. G      Rows%=
  5224. text(wi%,1)):
  5225.  Rows%=0 
  5226.  moan_err%,
  5227. msg("Err104")
  5228.       LastTable%+=1
  5229. !      Tablenumber%=LastTable%
  5230. $      table$(Tablenumber%)=name$
  5231.       tablen%=
  5232. (start$)+1
  5233.        tablen%+=
  5234. (Rows%))+1
  5235.       
  5236.  "Hourglass_On"
  5237. .      
  5238. text(scrollW%,TabFields%*2)<>""
  5239. 0        width$=$
  5240. text(scrollW%,TabFields%*2)
  5241.          tablen%+=
  5242. (width$)+1
  5243. .        tabfieldlen%(TabFields%)=
  5244. (width$)
  5245. ,        Rec%+=tabfieldlen%(TabFields%)+1
  5246. 1        head$=$
  5247. text(scrollW%,TabFields%*2+1)
  5248. Y        
  5249. (head$)>tabfieldlen%(TabFields%) 
  5250.  LastTable%-=1:
  5251.  moan_err%,
  5252. msg("Err38")
  5253.          headlen%+=
  5254. (head$)+1
  5255.         TabFields%+=1
  5256.       
  5257.       TabFields%-=1
  5258. 5      
  5259.  TabFields%<0 
  5260.  moan_err%,
  5261. msg("Err112")
  5262. ;      tablen%+=(
  5263. (TabFields%))+1+headlen%+Rows%*Rec%)
  5264. Q      
  5265. extend_named_sliding_block(tabanchor%(Tablenumber%),(tablen%+3) 
  5266. +      tabptr%=!tabanchor%(Tablenumber%)
  5267. 0      $tabptr%=start$:tabptr%+=
  5268. ($tabptr%)+1
  5269. 2      $tabptr%=
  5270. (Rows%):tabptr%+=
  5271. ($tabptr%)+1
  5272. 7      $tabptr%=
  5273. (TabFields%):tabptr%+=
  5274. ($tabptr%)+1
  5275.       
  5276.  I%=0 
  5277.  TabFields%
  5278. ?        $tabptr%=
  5279. (tabfieldlen%(I%)):tabptr%+=
  5280. ($tabptr%)+1
  5281.       
  5282.       
  5283.  I%=0 
  5284.  TabFields%
  5285. C        $tabptr%=$
  5286. text(scrollW%,I%*2+1):tabptr%+=
  5287. ($tabptr%)+1
  5288.       
  5289.       
  5290.  row%=1 
  5291.  Rows%
  5292.         
  5293.  I%=0 
  5294.  TabFields%
  5295. 5          $tabptr%="":tabptr%+=tabfieldlen%(I%)+1
  5296.         
  5297.       
  5298.  row%
  5299.       
  5300.  "Hourglass_Off"
  5301. #      
  5302. show_table(Tablenumber%)
  5303.        TabsLoaded$+=","+name$
  5304. !      
  5305.  !tablemenuanchor%=0 
  5306. H        
  5307. extend_named_sliding_block(tablemenuanchor%,MaxTabs%*35+65)
  5308. i        tablemenu%=!tablemenuanchor%:tableiconptr%=tablemenu%:tabletextptr%=tablemenu%+MaxTabs%*24+52
  5309. #        $tableiconptr%="Tables"
  5310.         tableiconptr%?12=7:tableiconptr%?13=2:tableiconptr%?14=7:tableiconptr%?15=0:tableiconptr%!16=168:tableiconptr%!20=44:tableiconptr%!24=0
  5311.         tableiconptr%+=28
  5312. A        ptr%=menu%(2)+52:ptr%!4=tablemenu%:
  5313. lit(menu%(2),1,
  5314.         !tableiconptr%=128
  5315. C        
  5316.  !tableiconptr%=0:tableiconptr%+=24:!tableiconptr%=128
  5317.       
  5318. ~      tableiconptr%!4=-1:tableiconptr%!8=&7000121:tableiconptr%!12=tabletextptr%:tableiconptr%!16=-1:tableiconptr%!20=L%+1
  5319. 2      $tabletextptr%=name$:tabletextptr%+=L%+1
  5320. U      
  5321. text(wi%,2)="Modify" 
  5322. write_back_to_table(OldTable%,Tablenumber%,wi%)
  5323.         
  5324. 4    
  5325. close_it(wi%):
  5326. set_caret(mainW%,starthere%)
  5327. asterisk(
  5328. modify_table(T%,wi%)
  5329.  I%,Rows%,Rec%,L%,TabFields%,head$,cols%
  5330. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  5331. text(wi%,2)="Modify"
  5332. text(wi%,0)=table$(T%)
  5333. text(wi%,1)=
  5334. (Rows%)
  5335. $tabcol%="0"
  5336.  I%=0 
  5337.  MaxCols%*2+1
  5338. text(scrollW%,I%)=""
  5339.  I%=0 
  5340.  TabFields%
  5341. text(scrollW%,I%*2)=
  5342. (tabfieldlen%(I%))
  5343. text(scrollW%,I%*2+1)=$
  5344. text(tableW%(T%),Rows%*(TabFields%+1)+I%)
  5345.  colours$="" 
  5346.  colours$="2807"
  5347. cols%=
  5348. ("&"+colours$)
  5349. set_icon_cols(wi%,13,cols% 
  5350.  256)
  5351. set_icon_cols(wi%,14,cols% 
  5352.  256)
  5353. OldTable%=T%
  5354. open_window(wi%):
  5355. set_caret(wi%,0)
  5356. redraw(tabcreateW%):
  5357. redraw(scrollW%)
  5358. write_back_to_table(old%,new%,wi%)
  5359.  row%,column%,P%,N%,I%,ic%
  5360. "ct$=
  5361. table_info(old%,oldRows%,oldTabFields%,Rec%,tabfieldlen%(),oldoffset%,oldheading%,colours$)
  5362. P%=oldheading%
  5363. tabhead$()=""
  5364.  I%=0 
  5365.  oldTabFields%
  5366. &%  tabhead$(I%,0)=$P%:P%+=
  5367. ($P%)+1
  5368.  I%=0 
  5369.  TabFields%
  5370. ),  tabhead$(I%,1)=$
  5371. text(scrollW%,2*I%+1)
  5372.  oldRows%<=Rows% 
  5373.  N%=oldRows%-1 
  5374.  N%=Rows%-1
  5375.  "Hourglass_On"
  5376.  row%=0 
  5377. ./  P%=!tabanchor%(old%)+oldoffset%+row%*Rec%
  5378.  column%=0 
  5379.  oldTabFields%
  5380.     I%=-1
  5381. 1        
  5382.       I%+=1
  5383. 3<    
  5384.  tabhead$(I%,1)=tabhead$(column%,0) 
  5385.  I%>TabFields%
  5386.  I%<=TabFields% 
  5387. 5$      ic%=row%*(TabFields%+1)+I%
  5388. 6K      $
  5389. text(tableW%(new%),ic%)=
  5390. buffer_length(tableW%(new%),ic%))
  5391. 7%      P%+=tabfieldlen%(column%)+1
  5392. 8        
  5393.  column%
  5394.  row%
  5395.  "Hourglass_Off"
  5396. text(wi%,2)="Create"
  5397. redraw(tableW%(new%))
  5398. clear_table(T%)
  5399. confirm(
  5400. msg("Err47"))=
  5401.  R%,F%,ind%,Rows%,TabFields%,start%,Rec%
  5402. CUT$=
  5403. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  5404. D'start%=!tabanchor%(T%)+offset%-Rec%
  5405.  R%=1 
  5406.  Rows%
  5407.   ind%=start%+R%*Rec%
  5408.  F%=0 
  5409.  TabFields%
  5410. H)    $ind%="":ind%+=tabfieldlen%(F%)+1
  5411. redraw(tableW%(T%))
  5412. asterisk(
  5413. show_table(T%)
  5414.  ind%,start%,dflags%,hflags%,c%,I%,pos%,p$,t$,B%,tablefield%,offset%,heading%,colours$
  5415. QUt$=
  5416. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  5417. R;NewTab%=(t$="
  5418. "):extra%=-NewTab%*(Rows%*(TabFields%+1))
  5419.  T%<0 
  5420.  "SlidingHeap_DescribeBlock",slidingheapbase%,tabanchor%(T%) 
  5421.  ,,tablen%
  5422. extend_named_sliding_block(undoanchor%(T%),tablen%+1)
  5423.  "Wimp_TransferBlock",mytask%,!tabanchor%(T%),mytask%,!undoanchor%(T%),tablen%+1
  5424.  tableW%(T%)>0 
  5425. open_window(tableW%(T%)):
  5426. name$=table$(T%)
  5427. $Tablename%=name$
  5428. $menu%(17)=name$
  5429. [ ind%=!tabanchor%(T%)+offset%
  5430.  "Wimp_OpenTemplate",,"<Pbase$Dir>.Resources.Templates"
  5431. B%=buff%
  5432.  "Wimp_LoadTemplate",,block%,buff%,endbuff%,-1,"table",0 
  5433.  ,,buff%
  5434.  NewTab% 
  5435. (name$)+1 
  5436. (t$)+1
  5437. buff%+=L%:block%!80=L%
  5438.  "Wimp_CloseTemplate"
  5439. b#block%!28=block%!28 
  5440.  &AFFFFFFF
  5441.  (Rec%+TabFields%+9)*16<1136 
  5442.  Rows%<16:
  5443.  (Rec%+TabFields%+9)*16<1136:block%!28=block%!28 
  5444.  (1<<28)
  5445.  Rows%<16:block%!28=block%!28 
  5446.  (1<<30)
  5447. :block%!28=block%!28 
  5448.  ((1<<28)+(1<<30))
  5449.  "Wimp_CreateWindow",,block% 
  5450.  tableW%(T%)
  5451. jPTabTitle%(T%)=block%!72:
  5452.  NewTab% 
  5453.  $TabTitle%(T%)=name$ 
  5454.  $TabTitle%(T%)=t$
  5455.  "Hourglass_On"
  5456.  colours$="" 
  5457.  colours$="2807"
  5458. cols%=
  5459. ("&"+colours$)
  5460. n)hflags%=&0000A535+((cols% 
  5461.  256)<<24)
  5462. o)dflags%=&0000A535+((cols% 
  5463.  256)<<24)
  5464.  row%=1 
  5465.  Rows%
  5466.   pos%=72
  5467.  I%=0 
  5468.  TabFields%
  5469.     R%=
  5470. create_icon(tableW%(T%),pos%,-row%*44-4+44*NewTab%,(tabfieldlen%(I%)+1)*16+2,48,dflags%,"",ind%,writep%,tabfieldlen%(I%)+1)
  5471. t%    pos%+=(tabfieldlen%(I%)+1)*16
  5472. u     ind%+=tabfieldlen%(I%)+1
  5473.  "Hourglass_Percentage",row%*100 
  5474.  Rows%
  5475.  row%
  5476.  NewTab% 
  5477.   pos%=72
  5478.  I%=0 
  5479.  TabFields%
  5480. |t    R%=
  5481. create_icon(tableW%(T%),pos%,-48,(tabfieldlen%(I%)+1)*16+2,48,hflags%,"",heading%,-1,tabfieldlen%(I%)+1)
  5482. }%    pos%+=(tabfieldlen%(I%)+1)*16
  5483. ~     heading%+=
  5484. ($heading%)+1
  5485.  "Hourglass_Off"
  5486. p$=printrel$(T%)
  5487.  p$<>"" 
  5488.  I%=1 
  5489. (p$) 
  5490.      tablefield%=
  5491. p$,I%,3))
  5492. /    
  5493. select(tableW%(T%),tablefield%+extra%)
  5494. width%=(Rec%*16)+112
  5495. -!block%=0:block%!4=-Rows%*44-4+44*NewTab%
  5496. block%!8=width%:block%!12=0
  5497.  "Wimp_SetExtent",tableW%(T%),block%
  5498. getscreensize(ScreenWidth%,ScreenHeight%,Vpix%)
  5499. !block%=tableW%(T%)
  5500.  "Wimp_GetWindowState",,block%
  5501. &block%!4=(ScreenWidth%-width%) 
  5502. block%!12=block%!4+width%
  5503.  Rows%<20 
  5504. -  block%!8=ScreenHeight% 
  5505.  2-(Rows%*18+2)
  5506. .  block%!16=block%!8+Rows%*44+4-44*NewTab%
  5507. $  block%!8=ScreenHeight% 
  5508.  2-362
  5509. +  block%!16=block%!8+44*20+4-44*NewTab%
  5510.  "Wimp_OpenWindow",,block%
  5511. redraw(tableW%(T%))
  5512.  Access% 
  5513. set_caret(tableW%(T%),0)
  5514. restore_table(T%)
  5515.  "SlidingHeap_DescribeBlock",slidingheapbase%,tabanchor%(T%) 
  5516.  ,,tablen%
  5517.  "Wimp_TransferBlock",mytask%,!undoanchor%(T%),mytask%,!tabanchor%(T%),tablen%+1
  5518. redraw(tableW%(T%))
  5519. restore_tabfield
  5520.  source%,dest%
  5521.  "Wimp_GetCaretPosition",,block%:wi%=!block%:ic%=block%!4
  5522.  wi%=tableW%(Tablenumber%) 
  5523. ,  dest%=
  5524. text(tableW%(Tablenumber%),ic%)
  5525. H  source%=!undoanchor%(Tablenumber%)+dest%-!tabanchor%(Tablenumber%)
  5526.   $dest%=$source%
  5527. redraw_icon(tableW%(Tablenumber%),ic%)
  5528. sort_table(T%,field%)
  5529.  tablen%,ind%,Rec%,Rows%,row%,TabFields%,pos%,dest%
  5530. Ytitle$=
  5531. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  5532. ,pos%=
  5533. table_field(field%,tabfieldlen%())
  5534. *ind%=!tabanchor%(T%)+offset%-Rec%+pos%
  5535.  row%=0 
  5536.  Rows%-1
  5537.   ind%+=Rec%
  5538.   block%!(row%*4)=ind%
  5539.  $ind%="" 
  5540.  $ind%="~"
  5541.  row%
  5542.  "OS_HeapSort",Rows%,block%,4
  5543. extend_named_sliding_block(tempanchor%,Rows%*Rec%)
  5544. dest%=!tempanchor%-Rec%
  5545.  row%=0 
  5546.  Rows%-1
  5547. &  ind%=block%!(row%*4):dest%+=Rec%
  5548.  $ind%="~" 
  5549.  $ind%=""
  5550.  "Wimp_TransferBlock",mytask%,ind%-pos%,mytask%,dest%,Rec%
  5551.  row%
  5552.  "Wimp_TransferBlock",mytask%,!tempanchor%,mytask%,!tabanchor%(T%)+offset%,Rows%*Rec%
  5553. scrap_sliding_block(tempanchor%)
  5554. redraw(tableW%(T%))
  5555. print_table(T%)
  5556.  printing% 
  5557.  indexing% 
  5558.  start%,ptr%,Line$,title$,rowsused%,Heading$,h$,column%
  5559. QTextName$=$database%+".PrintJobs."+
  5560. "Tab"+table$(T%),10):$SaveName%=TextName$
  5561. read_print_options
  5562. format$="horiz"
  5563. Ytitle$=
  5564. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  5565. Heading$=margin$
  5566.  NewTab% 
  5567.  column%=0 
  5568.  TabFields%
  5569. ;    h$=$
  5570. text(tableW%(T%),Rows%*(TabFields%+1)+column%)
  5571. ;    Heading$+=h$+
  5572. tabfieldlen%(column%)-
  5573. (h$)," ")+"  "
  5574.  column%
  5575.  Heading$+=title$+
  5576. Rec%-
  5577. (title$)," ")
  5578. 'LenLine%=Lmargin%+Rec%+TabFields%+2
  5579. extend_named_sliding_block(lineanchor%,LenLine%+4)
  5580. extend_named_sliding_block(headanchor%,LenLine%+4):pos%=!headanchor%
  5581. heap_store(headanchor%,LenLine%,0,pos%,0,Heading$)
  5582. Title$="Validation table"
  5583. Title1$=table$(T%)
  5584. Title2$=""
  5585. reportdest$="Window"
  5586. Count%=0
  5587. list_head(0)
  5588.  "Hourglass_On"
  5589.  I%=1 
  5590.  Rows%
  5591. )  start%=!tabanchor%(T%)+offset%-Rec%
  5592.   Line$=margin$
  5593.   ptr%=start%+I%*Rec%
  5594.  J%=0 
  5595.  TabFields%
  5596. D    
  5597.  $ptr%<>"" 
  5598.  Line$+=$ptr%+
  5599. tabfieldlen%(J%)-
  5600. ($ptr%)+2," ")
  5601.      ptr%+=tabfieldlen%(J%)+1
  5602.  Line$<>margin$ 
  5603.     rowsused%+=1
  5604. D    $(!lineanchor%)=Line$:
  5605. list_line(-1,lineanchor%,
  5606. (Line$),32)
  5607.  "Hourglass_Percentage",I%*100 
  5608.  Rows%
  5609.  "Hourglass_Off"
  5610. rule_off(45)
  5611. S$=margin$+
  5612. (Rows%)+" rows"
  5613. :$(!lineanchor%)=S$:
  5614. list_line(-1,lineanchor%,
  5615. (S$),32)
  5616. #S$=margin$+
  5617. (rowsused%)+" used"
  5618. :$(!lineanchor%)=S$:
  5619. list_line(-1,lineanchor%,
  5620. (S$),32)
  5621. rule_off(45)
  5622. screen_list
  5623. pitch$=
  5624. pitch("0")
  5625. lit(menu%(18),1,
  5626. write_log(-1,"Table printed: "+table$(T%))
  5627. write_table_as_csv(T%,Filename$)
  5628.  ic%,row%,column%,Rows%,TabFields%,Rec%,offset%,heading%,csvhandle%,F$
  5629. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  5630. csvhandle%=
  5631. (Filename$)
  5632. ic%=-1
  5633.  "Hourglass_On"
  5634.  row%=0 
  5635.  Rows%-1
  5636.  column%=0 
  5637.  TabFields%
  5638. )    ic%+=1:F$=$
  5639. text(tableW%(T%),ic%)
  5640. .    
  5641. selected(csvW%,0) 
  5642.  F$=""""+F$+""""
  5643. 3    
  5644.  column%<TabFields% 
  5645.  F$+=sep$ 
  5646.  F$+=term$
  5647. #csvhandle%,F$;
  5648.  column%
  5649.  row%
  5650.  "Hourglass_Off"
  5651. close_file(csvhandle%)
  5652.  sep$="," 
  5653.  type%=&dfe 
  5654.  type%=&fff
  5655.  "OS_File",18,Filename$,type%
  5656. writetable%=
  5657. csv_to_table(T%,filename$)
  5658.  ic%,row%,column%,Rows%,TabFields%,Rec%,offset%,heading%,csvhandle%,base%,F$,sep%,sep2%,term%,term2%
  5659. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  5660. :sep%=
  5661. (sep$):
  5662. (sep$)=2 
  5663.  sep2%=
  5664. sep$)) 
  5665.  sep2%=255
  5666. @term%=
  5667. (term$):
  5668. (term$)=2 
  5669.  term2%=
  5670. term$)) 
  5671.  term2%=255
  5672. size%=&100:inc%=size%
  5673. extend_named_sliding_block(tempanchor%,size%)
  5674. base%=!tempanchor%
  5675. csvhandle%=
  5676. (filename$)
  5677. ic%=-1
  5678.  "Hourglass_On"
  5679.  row%=0 
  5680.  Rows%-1
  5681.  column%=0 
  5682.  TabFields%
  5683.     ic%+=1
  5684. #csvhandle% 
  5685.        
  5686. read_bytes
  5687.  K       $
  5688. text(tableW%(T%),ic%)=
  5689. $base%,
  5690. buffer_length(tableW%(T%),ic%))
  5691. !        
  5692.  column%
  5693.  row%
  5694.  "Hourglass_Off"
  5695. close_file(csvhandle%)
  5696. redraw(tableW%(T%))
  5697. table_number(N$)
  5698.  T%,P%
  5699.  N$="" 
  5700. ,    T%=-1
  5701.   T%+=1
  5702.  table$(T%)=N$ 
  5703.  T%>LastTable%
  5704.  T%>LastTable% 
  5705. table_info(table%,
  5706.  rows%,
  5707.  columns%,
  5708.  recordlength%,colwidth%(),
  5709.  offset%,
  5710.  heading%,
  5711.  colours$)
  5712.  P%,Q%,I%,new%,S$
  5713. 4 P%=!tabanchor%(table%):Q%=P%
  5714. S$=$P%
  5715. S$,3)="new" 
  5716.  new%=
  5717. :colours$=
  5718. S$,4):P%+=
  5719. ($P%)+1
  5720. rows%=
  5721. ($P%):P%+=
  5722. ($P%)+1
  5723. 8 columns%=
  5724. ($P%):P%+=
  5725. ($P%)+1
  5726. recordlength%=0
  5727.  I%=0 
  5728.  columns%
  5729. ;'  colwidth%(I%)=
  5730. ($P%):P%+=
  5731. ($P%)+1
  5732. <$  recordlength%+=colwidth%(I%)+1
  5733. heading%=P%
  5734.  new% 
  5735.  I%=0 
  5736.  columns%
  5737.     P%+=
  5738. ($P%)+1
  5739.   offset%=P%-Q%
  5740.  P%+=
  5741. ($P%)+1:offset%=160
  5742.  new% 
  5743. =$heading%
  5744. table_field(F%,L%())
  5745.  I%,P%
  5746.  I%<F%
  5747.   P%+=L%(I%)+1
  5748.   I%+=1
  5749. trailing_number(
  5750.  exact%)
  5751. S$)="~" 
  5752.  exact%=
  5753.  exact%=
  5754.  S$<>"" 
  5755. S$))<58
  5756.     N$=
  5757. S$)+N$
  5758.     S$=
  5759.  N$="" 
  5760. leading_number(
  5761.  S$<>"" 
  5762. (S$)<58
  5763.     N$=N$+
  5764. S$,1)
  5765.     S$=
  5766. S$,2)
  5767.  N$="" 
  5768. load_table(f$,show%)
  5769.  pos%,name$,d%,L%
  5770. name$=
  5771. leaf(f$):L%=
  5772. (name$)
  5773. TabsLoaded$,name$)=0 
  5774.  "OS_File",5,f$ 
  5775.  d%,,,,tablen%
  5776.  LastTable%=MaxTabs% 
  5777.  show% 
  5778. l.      
  5779. softerror(
  5780. (MaxTabs%+1),32):show%=
  5781. m:      
  5782. extratabs$,name$)=0 
  5783.  extratabs$+=name$+" "
  5784. n        
  5785. o        
  5786.     LastTable%+=1
  5787. qM    
  5788. create_named_sliding_block(tabanchor%(LastTable%),(tablen%+3) 
  5789. r3    
  5790.  "OS_File",255,f$,!tabanchor%(LastTable%)
  5791. s     table$(LastTable%)=name$
  5792.     Tablenumber%=LastTable%
  5793.     TabsLoaded$+=","+name$
  5794.  !tablemenuanchor%=0 
  5795. wF      
  5796. extend_named_sliding_block(tablemenuanchor%,MaxTabs%*35+65)
  5797. xg      tablemenu%=!tablemenuanchor%:tableiconptr%=tablemenu%:tabletextptr%=tablemenu%+MaxTabs%*24+52
  5798. y!      $tableiconptr%="Tables"
  5799.       tableiconptr%?12=7:tableiconptr%?13=2:tableiconptr%?14=7:tableiconptr%?15=0:tableiconptr%!16=168:tableiconptr%!20=44:tableiconptr%!24=0
  5800.       tableiconptr%+=28
  5801. |?      ptr%=menu%(2)+52:ptr%!4=tablemenu%:
  5802. lit(menu%(2),1,
  5803.       !tableiconptr%=128
  5804. ~A      
  5805.  !tableiconptr%=0:tableiconptr%+=24:!tableiconptr%=128
  5806.         
  5807. |    tableiconptr%!4=-1:tableiconptr%!8=&7000121:tableiconptr%!12=tabletextptr%:tableiconptr%!16=-1:tableiconptr%!20=L%+1
  5808. 0    $tabletextptr%=name$:tabletextptr%+=L%+1
  5809.  Tablenumber%=
  5810. table_number(name$)
  5811.  show% 
  5812. show_table(Tablenumber%)
  5813. link_to_table
  5814.  icon%
  5815. b%=(b% 
  5816.  %111)
  5817.  2,4:
  5818.  ic%=13 
  5819. 7    
  5820. tick_one(tablemenu%,0,LastTable%,Tablenumber%)
  5821. -    
  5822. show_menu(tablemenu%,oldx%+32,oldy%)
  5823.  %111 
  5824.  1,4:
  5825.  b%=4 
  5826.  z%=1 
  5827.  z%=-1
  5828.  ic% 
  5829. tcycle(z%)
  5830. tcycle(-z%)
  5831. !    
  5832. fcycle(z%,fieldnum%)
  5833. "    
  5834. fcycle(-z%,fieldnum%)
  5835. $    
  5836. fcycle(z%,substitute%)
  5837. %    
  5838. fcycle(-z%,substitute%)
  5839.  icon%=10 
  5840. 8      
  5841. icon_bit(22,linkW%,icon%,
  5842. selected(linkW%,9))
  5843.  icon%
  5844. $    
  5845.  ### Default action ###
  5846. "    icon%=field%(Fieldnumber%)
  5847. 1    
  5848. selected(linkW%,4) 
  5849.  $Tablename%<>"" 
  5850. 4      link$(Fieldnumber%)=$Tablename%+$fieldnum%
  5851. =      
  5852. selected(linkW%,15) 
  5853.  link$(Fieldnumber%)+="~"
  5854. /      
  5855. set_icon_cols(mainW%,icon%,fcol%(6))
  5856. V      
  5857. selected(linkW%,9) 
  5858.  link$(Fieldnumber%)=$substitute%+link$(Fieldnumber%)
  5859.       
  5860.        link$(Fieldnumber%)=""
  5861. (      
  5862. set_icon_cols(mainW%,icon%,7)
  5863.         
  5864.     link$(0)="LOADED"
  5865. asterisk(
  5866. &    
  5867.  b%=4 
  5868. close_window(linkW%)
  5869. "    
  5870. close_window(linkW%)
  5871. tcycle(z%)
  5872.  LastTable%=-1 
  5873. Tablenumber%+=z%
  5874.  Tablenumber%>LastTable% 
  5875.  Tablenumber%=0
  5876.  Tablenumber%<0 
  5877.  Tablenumber%=LastTable%
  5878. $$Tablename%=table$(Tablenumber%)
  5879. redraw_icon(linkW%,0)
  5880. fcycle(z%,column%)
  5881. table_info(Tablenumber%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  5882. field%=
  5883. ($column%)
  5884. field%+=z%
  5885.  field%>TabFields% 
  5886.  field%=0
  5887.  field%<0 
  5888.  field%=TabFields%
  5889. $column%=
  5890. (field%)
  5891. redraw_icon(linkW%,2)
  5892. redraw_icon(linkW%,10)
  5893. link_status
  5894.  name$,field$,ic%,subst$,exact%
  5895. name$=link$(Fieldnumber%)
  5896. ,field$=
  5897. trailing_number(name$,exact%))
  5898. set_icon(linkW%,15,exact%)
  5899. ?subst$=
  5900. leading_number(name$)):
  5901.  subst$="-1" 
  5902.  subst$="0"
  5903.  (name$<>"" 
  5904. TabsLoaded$,name$)>0) 
  5905. =  $Tablename%=name$:$fieldnum%=field$:$substitute%=subst$
  5906. '  Tablenumber%=
  5907. table_number(name$)
  5908. select(linkW%,4)
  5909.   Tablenumber%=0
  5910. &  $Tablename%=table$(Tablenumber%)
  5911. deselect(linkW%,4):$fieldnum%="0"
  5912. set_icon(linkW%,9,subst$<>"0")
  5913.  ic%=10 
  5914. icon_bit(22,linkW%,ic%,
  5915. selected(linkW%,9))
  5916. redraw_icon(linkW%,0):
  5917. redraw_icon(linkW%,2)
  5918. save_links
  5919.  link$(0)="LOADED" 
  5920.   lk=
  5921. ($database%+".Link")
  5922.  F%=1 
  5923.  fields%
  5924. #lk,link$(F%)
  5925. close_file(lk)
  5926.  End of Validation table routines ------------------------------------
  5927. changes(key%)
  5928.  M$,K%,index%,target$,log$
  5929. "target$=$Query%:Search$=
  5930. parse
  5931. Old$=$
  5932. text(changeW%,0)
  5933. New$=$
  5934. text(changeW%,1)
  5935.  New$="" 
  5936.  n$="<null>" 
  5937.  n$=New$
  5938.  New$<>"" 
  5939. "+-*/",
  5940. New$,1))>0 
  5941.   numeric%=
  5942.  numeric%=
  5943. is_a_key(Fieldnumber%)
  5944.  K%=key% 
  5945. softerror("",12):
  5946.  "Wimp_CreateMenu",,-1:
  5947.  K%>=0 
  5948.  M$=" NOTE! Index on this field will NO LONGER BE VALID and should be deleted." 
  5949.  M$=""
  5950.  Old$<>"" 
  5951.  o$=" when existing value is "+Old$ 
  5952.  o$=""
  5953.  target$="" 
  5954.  target$=" for all subfile "+
  5955. (file%) 
  5956.  target$=" for "+target$+" in subfile "+
  5957. (file%)
  5958. Qlog$="Change contents of field "+Tag$(Fieldnumber%)+" to "+n$+o$+target$+". "
  5959. target$=log$+M$
  5960. confirm(target$)=
  5961. '  subtotal%=
  5962. count_recs(key%,zero%)
  5963.  "Hourglass_On"
  5964. ,  dbasehandle%=
  5965. ($database%+".Database")
  5966.   P%=
  5967. neighbour(key%,top,1)
  5968. scan_file("P%<>top",key%,file%,5)
  5969. close_file(dbasehandle%)
  5970.   $Date%(file%)=
  5971.   date%?file%=1
  5972. display(key%,addr)
  5973.  "Hourglass_Off"
  5974.  K%>=0 
  5975.  index%=K% 
  5976.  Keys%-1
  5977. !      Index$(K%)=Index$(K%+1)
  5978.  index%
  5979.     /    
  5980. scrap_sliding_block(keyanchor%(Keys%))
  5981.     Index$(Keys%)=""
  5982.     Keys%-=1
  5983. write_log(-1,log$)
  5984. asterisk(
  5985. is_a_key(F%)
  5986.  key%,flag%,J%
  5987. flag%=-1
  5988.  key%=0 
  5989.  Keys%
  5990.  J%=0 
  5991. &    
  5992.  KF%(key%,J%)=F% 
  5993.  flag%=key%
  5994.  key%
  5995. =flag%
  5996. read(N%,K%,R%,f$)
  5997.  I%,key%,dbasehandle%
  5998. "dbasehandle%=
  5999. (f$+".Database")
  6000. %$Rf%(0)="":field$(0)="":key$()=""
  6001. #dbasehandle%=
  6002. (R%)*Length%
  6003.  I%=1 
  6004.   field$(I%)=
  6005. #dbasehandle%
  6006.  chartype%(I%)<>40 
  6007.  chartype%(I%)<>59 
  6008.  $Rf%(I%)=field$(I%)
  6009.  chartype%(I%) 
  6010. %8    
  6011.  36,37,38:
  6012. set_blob_sprite(R%,I%,chartype%(I%))
  6013. &!    
  6014. show_text_block(I%)
  6015. show_picture(I%)
  6016.  41,42,43,44,45:
  6017. )T    
  6018.  field$(I%)=" " 
  6019. select(mainW%,field%(I%)) 
  6020. deselect(mainW%,field%(I%))
  6021. *(    
  6022.  R%=RA% 
  6023.  $Rf%(I%)=
  6024. (REC%)
  6025. +9    
  6026.  R%=RA% 
  6027. split_link(I%,R$,V$):$Rf%(I%)=R$
  6028. ,'    
  6029.  R%=RA% 
  6030.  $Rf%(I%)=
  6031. -(    
  6032.  R%=RA% 
  6033.  $Rf%(I%)=
  6034. $,15)
  6035. .1    
  6036.  R%=RA% 
  6037.  $Rf%(I%)=
  6038. convert_date(2)
  6039. /1    
  6040.  R%=RA% 
  6041.  $Rf%(I%)=
  6042. convert_date(4)
  6043. 0#    
  6044.  R%=RA% 
  6045.  $Rf%(I%)=
  6046. 1'    
  6047.  R%=RA% 
  6048.  $Rf%(I%)=
  6049. 2)    
  6050.  R%=RA% 
  6051.  $Rf%(I%)=
  6052. $,5,2)
  6053. 3)    
  6054.  R%=RA% 
  6055.  $Rf%(I%)=
  6056. $,8,3)
  6057. 4J    
  6058.  R%=RA% 
  6059. $,8,3):P%=
  6060. months$,M$):$Rf%(I%)=
  6061. ((P%+2) 
  6062. 5*    
  6063.  R%=RA% 
  6064.  $Rf%(I%)=
  6065. $,12,4)
  6066.  key%=0 
  6067.  Keys%
  6068.     key$(key%)=
  6069. key(key%)
  6070.  key%
  6071. close_file(dbasehandle%)
  6072. cfield$()=field$()
  6073. update_calcs(N%)
  6074.  design% 
  6075.  N%>0 
  6076.  $Rf%(N%)=cfield$(N%) 
  6077.  I%,C%,L%,F,F$,Form$,S$,SF$,changed%
  6078. Form$=update$(N%)
  6079.  Form$=0 
  6080. calc_error:=
  6081.  I%=1 
  6082. (Form$)-1 
  6083.   F%=
  6084. fnum(
  6085. Form$,I%,2))
  6086.  F%<>N% 
  6087. L&    
  6088. split_link(F%,real$,visible$)
  6089.  chartype%(F%) 
  6090.       
  6091. O@      F=
  6092. (real$):F$=
  6093.  fix%(F%)>0 
  6094. fix_point(F$,F%)
  6095.       
  6096.       F$=
  6097. (real$)
  6098. R9      
  6099.  N%=0 
  6100. expand(F$,link$(F%),L%,SF$):F$=SF$
  6101. S        
  6102. (F$)<=len%(F%) 
  6103. U*      $Rf%(F%)=F$:cfield$(N%)=$Rf%(N%)
  6104. V)      
  6105. redraw_icon(mainW%,field%(F%))
  6106. W.      
  6107.  F$(F%)<>F$ 
  6108.  F$(F%)=F$:changed%=
  6109.       
  6110.  moan_err%,""
  6111. Y        
  6112. Z"    changed%=
  6113. update_calcs(F%)
  6114. =changed%
  6115. calc_error
  6116.  ### Division by zero. Ignore ###
  6117.  moan_err%:
  6118. softerror(calc$(F%),10)
  6119. softerror(calc$(F%),73)
  6120. check_change
  6121.  F%,flag%
  6122.  F%<fields%
  6123.   F%+=1
  6124.  chartype%(F%) 
  6125.  0,1,2,3,4,5,6,7,8:
  6126.  ?Rf%(F%)=32
  6127.       $Rf%(F%)=$(Rf%(F%)+1)
  6128. p        
  6129.  chartype%(F%) 
  6130. s+    
  6131.  0,1,2,3,4,5,6,7,8,41,42,43,44,45:
  6132. t     
  6133.  $Rf%(F%)<>field$(F%) 
  6134.       flag%=
  6135. vD      
  6136.  customise% 
  6137. record_change(REC%,F%,field$(F%),$Rf%(F%))
  6138. w        
  6139.  flag% 
  6140. write(fields%,key%):
  6141. asterisk(
  6142. write(N%,k%)
  6143.  key%,newrec%,dontalter%
  6144.  Access% 
  6145. softerror("",14):
  6146. close_file(dbasehandle%)
  6147.  template%=2 
  6148. write_dbase(RA%,N%,
  6149. ):template%=0:
  6150. PRI$=
  6151. key(0)
  6152.  PRI$="" 
  6153.  key$(0) 
  6154.  key%=0 
  6155.  Keys%
  6156.     KEY$=
  6157. key(key%)
  6158.     kl%=
  6159. (KEY$)
  6160. insert(KEY$,key%)
  6161.  KEY$<>"*Failed*" 
  6162. #      key$(key%)=KEY$:newrec%=
  6163. $      
  6164.  k%=key% 
  6165.  addr=nextfree%
  6166.       
  6167.  dontalter%=
  6168.         
  6169.  key%
  6170.  key%=0 
  6171.  Keys%
  6172.     KEY$=
  6173. key(key%)
  6174.  KEY$<>key$(key%) 
  6175. L      
  6176.  key%=0 
  6177. confirm(
  6178. msg("Err48")) 
  6179.  dontalter%=
  6180. restore_rec
  6181.       
  6182.  dontalter%=
  6183. $        
  6184. delete(key$(key%),key%)
  6185.         
  6186. insert(KEY$,key%)
  6187.         key$(key%)=KEY$
  6188.       
  6189.         
  6190.  key%
  6191.  dontalter% 
  6192. $Date%(file%)=
  6193. date%?file%=1
  6194.  newtree% 
  6195. write_dbase(REC%,N%,
  6196.  newrec% 
  6197.  autobalance% 
  6198.   added%+=1
  6199.  added%=
  6200. ($Every%) 
  6201.  key%=0 
  6202.  Keys%
  6203.       
  6204. balance(key%)
  6205.  key%
  6206.     added%=0
  6207. write_dbase(R%,N%,logchanges%)
  6208.  I%,F$,S$,dbasehandle%,flag%
  6209. *dbasehandle%=
  6210. ($database%+".Database")
  6211. #dbasehandle%=R%*Length%
  6212.  logchanges% 
  6213.  newrec% 
  6214. C    
  6215. write_log(R%,"New record: Subfile "+
  6216. (file%)+"  "+
  6217. key(0))
  6218. *    
  6219. write_log(R%,logentry$):flag%=
  6220.  I%=1 
  6221.  chartype%(I%) 
  6222.  39,40:F$=""
  6223.  newrec% 
  6224.       F$=$Rf%(I%)
  6225.       
  6226. split_link(I%,R$,V$)
  6227.       S%=
  6228. /      
  6229.  dontincrement%=
  6230.  S%+=1:F$=
  6231. (S%-1)
  6232.        calc$(I%)=V$+"|"+
  6233.       
  6234.  F$=$Rf%(I%)
  6235.         
  6236.     dontincrement%=
  6237.  58:F$=
  6238. :F$=$Rf%(I%)
  6239. #dbasehandle%,F$
  6240.  flag%=
  6241.  F$<>field$(I%) 
  6242.  chartype%(I%)<>59 
  6243. %    
  6244.  F$="" 
  6245.  D$="<null>" 
  6246.  D$=F$
  6247. 5    
  6248.  field$(I%)="" 
  6249.  S$="<null>" 
  6250.  S$=field$(I%)
  6251. 3    
  6252. write_log(-1,Tag$(I%)+": "+S$+" ---> "+D$)
  6253.   field$(I%)=F$
  6254. selected(prefsW%,44) 
  6255. readsmarray(dbasehandle%,R%)
  6256. write_csv_rec(R%,csvform$,autocsvhandle%)
  6257. close_file(dbasehandle%)
  6258. split_link(F%,
  6259.  L$,P%,F
  6260. L$=calc$(F%)
  6261. L$,1)="#":
  6262. /  P%=
  6263. L$,"#",2):V$=
  6264. L$,P%+1):R$=
  6265. L$,2,P%-2)
  6266. L$,"|")>0:
  6267. +  P%=
  6268. L$,"|"):V$=
  6269. L$,P%-1):R$=
  6270. L$,P%+1)
  6271. :R$="":V$=""
  6272. key(key%)
  6273. key2(key%,0)
  6274. key2(key%,loc%)
  6275.  I%,W%,P%,S$,W$,T$,pad$,chars%,pos%,word%,wd%,field%,numeric%
  6276.  I%=0 
  6277.   W%=KW%(key%,I%):W$=""
  6278.  W%>0 
  6279.     chars%=W% 
  6280.     pos%=(W%>>8) 
  6281.     word%=(W%>>16) 
  6282.     field%=KF%(key%,I%)
  6283.  chartype%(field%) 
  6284. )      
  6285.  3,6,46,47,54,56,57:numeric%=
  6286.       
  6287. :numeric%=
  6288.         
  6289. :    
  6290.  loc%=0 
  6291.  S$=$Rf%(field%)+" " 
  6292.  S$=F$(field%)+" "
  6293.  numeric% 
  6294.       
  6295.  word% 
  6296.         
  6297.         
  6298. !          C$=
  6299. S$,1):S$=
  6300. S$,2)
  6301.            
  6302.  C$<>" " 
  6303.  W$+=C$
  6304.         
  6305.  S$=""
  6306.         
  6307.         wd%=0
  6308.         
  6309. :          P%=
  6310. S$," "):w$=
  6311. S$,P%-1):S$=
  6312. S$,P%+1):wd%+=1
  6313.         
  6314.  wd%=word% 
  6315.  S$=""
  6316.         
  6317.  wd%=word% 
  6318.  W$=w$
  6319.       
  6320.       
  6321.  pos% 
  6322.         
  6323.  0:W$=
  6324. W$,chars%)
  6325.          
  6326.  255:W$=
  6327. W$,chars%)
  6328. !        
  6329. W$,pos%,chars%)
  6330.       
  6331. @      
  6332.  incspace%(key%)=
  6333.  word%>0 
  6334.  W$+=
  6335. chars%-
  6336. (W$)," ")
  6337.        
  6338.  chartype%(field%) 
  6339. *        
  6340.  5,51,52:W$=
  6341. reverse_date(W$)
  6342.       
  6343.       
  6344.         
  6345.     T$+=W$
  6346.  T$<>"" 
  6347.  incspace%(key%)=
  6348.  pad$=" " 
  6349.  pad$="#"
  6350.    T$+=
  6351. KL%(key%)-
  6352. (T$),pad$)
  6353.  case%(key%) 
  6354. u(T$)
  6355. u(N$)
  6356.  I%,B%
  6357. $key=N$
  6358.  I%=0 
  6359. (N$)-1
  6360.   B%=key?I%
  6361.  B%>96 
  6362.  B%<123 
  6363.  key?I%=B% 
  6364.     =$key
  6365.  Y$,M$,D$,M%,date$
  6366. $,14,2)
  6367. $,5,2)
  6368. $,8,3)
  6369. ":M%=(
  6370. "JanFebMarAprMayJunJulAugSepOctNovDec",M$)+2) 
  6371.  M%<10 
  6372.  M$="0"+
  6373. (M%) 
  6374. date$=D$+"-"+M$+"-"+Y$
  6375. =date$
  6376. date(key%)
  6377.  !keyanchor%(key%)=0 
  6378.  I%=0 
  6379.  date%?I%=1 
  6380. ,)    $(!keyanchor%(key%)+8+9*I%)=
  6381.     $Date%(I%)=
  6382. check_date(D$,place%,
  6383.  date$)
  6384.  I%,D%,M%,Y%,L%,P%,Q%,U$,d$,m$,y$
  6385.  L%=0 
  6386.  I%=1 
  6387.   C$=
  6388. D$,I%,1)
  6389.  C$<"0" 
  6390.  C$>"9" 
  6391.  P%=0 
  6392.  P%=I% 
  6393.  Q%=I%
  6394.  P%=0 
  6395.  Q%=0 
  6396. restore(Fieldnumber%,"",102):=
  6397. D$,P%-1))
  6398. D$,P%+1,Q%-P%-1))
  6399. D$,Q%+1))
  6400.  Y%<0 
  6401.  D%<1 
  6402. restore(Fieldnumber%,"",4):=
  6403.  M%<1 
  6404.  M%>12 
  6405. restore(Fieldnumber%,
  6406. msg("Err118"),4):=
  6407.  400=0:U$="312931303130313130313031"
  6408.  100<>0 
  6409.  4=0:U$="312931303130313130313031"
  6410. :U$="312831303130313130313031"
  6411. U$,2*M%-1,2)
  6412. (DM$) 
  6413. restore(Fieldnumber%,
  6414. msg("Err119,"+DM$),4):=
  6415. I"d$=
  6416. (D%):
  6417. (d$)=1 
  6418.  d$="0"+d$
  6419. J"m$=
  6420. (M%):
  6421. (m$)=1 
  6422.  m$="0"+m$
  6423. K"y$=
  6424. (Y%):
  6425. (y$)=1 
  6426.  y$="0"+y$
  6427. (y$)<>2 
  6428. (y$)<>4 
  6429. restore(Fieldnumber%,
  6430. msg("Err120"),4):=
  6431. (y$)=4 
  6432.  len%(Fieldnumber%)<10 
  6433. y$,2)
  6434. (y$)=2 
  6435.  len%(Fieldnumber%)>=10 
  6436. $,12,2)+y$
  6437. O&date$=d$+$datesep%+m$+$datesep%+y$
  6438.  place%=0 
  6439. (date$)>len%(Fieldnumber%) 
  6440. restore(Fieldnumber%,
  6441. msg("Err121"),4):=
  6442.  place% 
  6443. SH  $Rf%(Fieldnumber%)=date$:
  6444. redraw_icon(mainW%,field%(Fieldnumber%))
  6445. U7  $
  6446. text(searchW%,1)=date$:
  6447. redraw_icon(searchW%,1)
  6448. convert_date(L%)
  6449.  d$,m$,y$,M$,M%
  6450. $,5,2)
  6451. $,8,3)
  6452. months$,M$)
  6453. M%=(P%+2) 
  6454. _ m$=
  6455. (M%):
  6456.  M%<10 
  6457.  m$="0"+m$
  6458. $,16-L%,L%)
  6459. a!=d$+$datesep%+m$+$datesep%+y$
  6460. reverse_date(K$)
  6461.  sep$
  6462. (K$) 
  6463.   sep$=
  6464. K$,3,1)
  6465. h.  K$=
  6466. K$,2)+sep$+
  6467. K$,4,2)+sep$+
  6468. K$,2) 
  6469. (K$)<100 
  6470.     sep$=
  6471. K$,3,1)
  6472. l+    K$=
  6473. K$,4)+sep$+
  6474. K$,4,2)+sep$+
  6475. K$,2)
  6476. m        
  6477.     sep$=
  6478. K$,5,1)
  6479. o+    K$=
  6480. K$,2)+sep$+
  6481. K$,6,2)+sep$+
  6482. K$,4)
  6483. refresh_dates
  6484.  key%
  6485.  key%=0 
  6486.  Keys%
  6487. date(key%)
  6488.  key%
  6489. seconds(time$,place%)
  6490.  I%,L%,P%,Q%,H%,M%,S%,secs%,h$,m$,s$,C$
  6491. (time$)
  6492.  L%=0 
  6493.  I%=1 
  6494.   C$=
  6495. time$,I%,1)
  6496.  C$<"0" 
  6497.  C$>"9" 
  6498.  P%=0 
  6499.  P%=I% 
  6500.  Q%=I%
  6501.  P%=0 
  6502.  Q%=0 
  6503. restore(Fieldnumber%,"",101):=-1
  6504. time$,P%-1)):
  6505.  H%<0 
  6506.  H%>23 
  6507. restore(Fieldnumber%,"hours",94):=-1
  6508. time$,P%+1,Q%-P%-1)):
  6509.  M%<0 
  6510.  M%>59 
  6511. restore(Fieldnumber%,"minutes",94):=-1
  6512. time$,Q%+1)):
  6513.  S%<0 
  6514.  S%>59 
  6515. restore(Fieldnumber%,"seconds",94):=-1
  6516. (H%):
  6517. (h$)=1 
  6518.  h$="0"+h$
  6519. (M%):
  6520. (m$)=1 
  6521.  m$="0"+m$
  6522. (S%):
  6523. (s$)=1 
  6524.  s$="0"+s$
  6525. &time$=h$+$timesep%+m$+$timesep%+s$
  6526. secs%=H%*3600+M%*60+S%
  6527.  place%=0 
  6528.  $Rf%(Fieldnumber%)=time$:
  6529. redraw_icon(mainW%,field%(Fieldnumber%))
  6530. =secs%
  6531. time(secs%)
  6532.  H%,M%,S%,h$,m$,s$
  6533. &H%=secs% 
  6534.  3600:secs%=secs% 
  6535.  3600
  6536. M%=secs% 
  6537. S%=secs% 
  6538. (H%):
  6539. (h$)=1 
  6540.  h$="0"+h$
  6541. (M%):
  6542. (m$)=1 
  6543.  m$="0"+m$
  6544. (S%):
  6545. (s$)=1 
  6546.  s$="0"+s$
  6547. !=h$+$timesep%+m$+$timesep%+s$
  6548. validate(F%,
  6549.  TabFields%,
  6550.  name$)
  6551. selected(prefsW%,21) 
  6552.  row%,field%,Rows%,Rec%,ind%,sind%,pos%,start%,subst%,spos%,date$,subst$,L1%,L2%,L%,S$,exact%,extra$
  6553. S$=$Rf%(F%):L%=
  6554.  S$="" 
  6555.  fix%(F%)>0 
  6556.  $Rf%(F%)=
  6557. fix_point(S$,F%):
  6558. redraw_icon(mainW%,field%(F%))
  6559.  chartype%(F%)=3 
  6560. check_val(calc$(F%),S$)
  6561.  chartype%(F%)=5 
  6562. check_date(S$,0,date$)
  6563.  chartype%(F%)=8 
  6564. seconds(S$,0)>=0)
  6565. Bname$=link$(F%):
  6566.  name$="" 
  6567. name$,1)="#" 
  6568. name$,1)="@" 
  6569. )field%=
  6570. trailing_number(name$,exact%)
  6571. !subst%=
  6572. leading_number(name$)
  6573. table_number(name$):
  6574.  T%<0 
  6575. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  6576.  S$=field$(F%) 
  6577.  TabFields%=0 
  6578. ,pos%=
  6579. table_field(field%,tabfieldlen%())
  6580.  subst%<0 
  6581.  spos%=pos% 
  6582.  spos%=
  6583. table_field(subst%,tabfieldlen%())
  6584. 'start%=!tabanchor%(T%)+offset%-Rec%
  6585. 'ind%=start%+pos%:sind%=start%+spos%
  6586.  exact% 
  6587. 1  cond$="row%>Rows% OR $ind%=S$ OR $sind%=S$"
  6588.  cond$="row%>Rows% OR ($ind%=LEFT$(S$,L1%) AND L1%>0) OR ($sind%=LEFT$(S$,L2%) AND L2%>0)"
  6589.  row%+=1
  6590.   ind%+=Rec%:sind%+=Rec%
  6591.    L1%=
  6592. ($ind%):L2%=
  6593. ($sind%)
  6594. (cond$)=
  6595.  row%>Rows% 
  6596. restore(F%," ("+name$+")",5):=
  6597.  exact% 
  6598. ,    
  6599.  $sind%=
  6600. S$,L2%):extra$=
  6601. S$,L%-L2%)
  6602. +    
  6603.  $ind%=
  6604. S$,L1%):extra$=
  6605. S$,L%-L1%)
  6606. ind%=start%+row%*Rec%
  6607.  I%=0 
  6608.  TabFields%
  6609. ,  rel%(I%)=ind%:ind%+=tabfieldlen%(I%)+1
  6610.  subst%>=0 
  6611.   subst$=$sind%
  6612.   S$=subst$+extra$
  6613. (S$)<=len%(F%) 
  6614.  $Rf%(F%)=S$
  6615. redraw_icon(mainW%,field%(F%))
  6616.     =row%
  6617. check_val(C$,N$)
  6618.  min$,max$,P%,V,ok%
  6619.     ok%=
  6620.  N$="" 
  6621.  C$<>"" 
  6622.   P%=
  6623. C$,"|")
  6624.  P%>0 
  6625.     min$=
  6626. C$,P%-1)
  6627.     max$=
  6628. C$,P%+1)
  6629. H    
  6630.  min$<>"" 
  6631. (min$) 
  6632.  ok%=
  6633. restore(F%," (min="+min$+")",58)
  6634. H    
  6635.  max$<>"" 
  6636. (max$) 
  6637.  ok%=
  6638. restore(F%," (max="+max$+")",59)
  6639. restore_rec
  6640.  F%=1 
  6641.  fields%
  6642.  field$(F%)<>$Rf%(F%) 
  6643.     $Rf%(F%)=field$(F%)
  6644. '    
  6645. redraw_icon(mainW%,field%(F%))
  6646. restore(F%,E$,E%)
  6647.  E%>=0 
  6648. softerror(E$,E%)
  6649. $Rf%(F%)=field$(F%)
  6650. redraw_icon(mainW%,field%(F%))
  6651. set_caret(mainW%,field%(F%))
  6652. relations
  6653.  F%,I%,W%,L%,N$,row%,col%,subst%,flags%,name$,x%,y%,vxmin%,vymax%,scrollx%,scrolly%,exact%
  6654.  "Wimp_CreateMenu",,-1
  6655. getscreensize(ScreenWidth%,ScreenHeight%,Vpix%)
  6656. name$=link$(Fieldnumber%)
  6657.  name$="" 
  6658.  $Rf%(Fieldnumber%)="" 
  6659.     F%=-1
  6660. &row%=
  6661. validate(Fieldnumber%,F%,N$)
  6662. 'col%=
  6663. trailing_number(name$,exact%)
  6664. !subst%=
  6665. leading_number(name$)
  6666.  row%>0 
  6667. delete_icons(relateW%,0)
  6668.  I%=0 
  6669. 0      
  6670.  col%:flags%=&00000531+(fcol%(6)<<24)
  6671. #      
  6672.  subst%:flags%=&0B000531
  6673.       
  6674. :flags%=&07000531
  6675.         
  6676.     L%=
  6677. ($rel%(I%))
  6678. T    R%=
  6679. create_icon(relateW%,0,-I%*36-36,L%*16+16,32,flags%,"",rel%(I%),-1,L%+1)
  6680.  L%>W% 
  6681.  W%=L%
  6682.  W%<3 
  6683.  W%=3
  6684.   $RelTitle%=N$
  6685. &  width%=W%*16+16:height%=F%*36+36
  6686. a  !block%=0:block%!4=-height%:block%!8=width%:block%!12=0:
  6687.  "Wimp_SetExtent",relateW%,block%
  6688. 5  !block%=mainW%:
  6689.  "Wimp_GetWindowState",,block%
  6690. L  vxmin%=block%!4:vymax%=block%!16:scrollx%=block%!20:scrolly%=block%!24
  6691. Q  !block%=mainW%:block%!4=field%(Fieldnumber%):
  6692.  "Wimp_GetIconState",,block%
  6693. ?  x%=block%!16-scrollx%+vxmin%:y%=block%!20-scrolly%+vymax%
  6694. 7  !block%=relateW%:
  6695.  "Wimp_GetWindowState",,block%
  6696.  ScreenWidth%-x%<width% 
  6697.  width%=ScreenWidth%-x%
  6698. )  block%!4=x%+4:block%!12=x%+width%-4
  6699. *  block%!8=y%-height%-4:block%!16=y%-4
  6700. /  block%!28=-1:
  6701.  "Wimp_OpenWindow",,block%
  6702.  "Wimp_CreateMenu",,relateW%,x%+4,y%-4
  6703. fix_point(F$,F%)
  6704.  F$="" 
  6705. @%=&01020009+fix%(F%)*256
  6706. (F$))
  6707. @%=&90A
  6708. F$,len%(F%))
  6709. moveto(key%,P%,D%)
  6710. D%=(D%+1) 
  6711.  filter% 
  6712. &  P%=
  6713. next_match(P%,D%,Filter$,Z%)
  6714.   P%=
  6715. neighbour(key%,P%,D%)
  6716.  P%=top 
  6717.  7:P%=
  6718. neighbour(key%,P%,D%)
  6719. display(key%,P%)
  6720. next_match(P%,D%,S$,
  6721.  nomore%)
  6722.  record%,abort%,passgo%,matched%
  6723. %*dbasehandle%=
  6724. ($database%+".Database")
  6725.   P%=
  6726. neighbour(key%,P%,D%)
  6727.  P%=top 
  6728.     nomore%=
  6729. *!    P%=
  6730. neighbour(key%,P%,D%)
  6731.     passgo%+=1
  6732. ,+    
  6733.  passgo%>1 
  6734.  matched% 
  6735.  abort%=
  6736.  P%=top 
  6737.     matched%=
  6738. 0        
  6739. 1#    record%=
  6740. rec_no(k$,key%,P%)
  6741. 2*    
  6742. readsmarray(dbasehandle%,record%)
  6743. 3(    
  6744. (S$)=
  6745.  matched%=
  6746. :passgo%=0
  6747.  matched% 
  6748.  abort%
  6749. close_file(dbasehandle%)
  6750.  abort% 
  6751. softerror($Query%,113)
  6752. display(key%,P%)
  6753. ;3!block%=mainW%:
  6754.  "Wimp_GetWindowState",,block%
  6755.  P%=-1 
  6756. check_change
  6757.  template%=1 
  6758.  template%=2 
  6759.  template%=0
  6760.  I%,L%,S%,S$,k$,ok%
  6761. A.  keybase%=!keyanchor%(0):avail%=!keybase%
  6762. C:    
  6763.  !(keybase%+avail%)>0,template%=2,design%=
  6764. :ok%=
  6765.     incr%=
  6766. ($Increment%)
  6767.  incr%>0 
  6768. G+      
  6769. change_length(RA%+incr%,
  6770. ):ok%=
  6771.       
  6772. softerror("",2)
  6773. I        
  6774.  ok% 
  6775. M:      
  6776.  design%:$RecInfo%="Make adjustments to fields"
  6777. Na      
  6778.  template%=2:$RecInfo%="Enter data which you want to appear by default on new records"
  6779. Of      
  6780. :REC%=!(keybase%+avail%+8+KL%(0)+1):$RecInfo%=$Subfile%(file%)+" Record="+
  6781. (REC%)+". (New)"
  6782. P        
  6783. Q'    
  6784. read(fields%,
  6785. ,RA%,$database%)
  6786.  top:
  6787.  ### Empty subfile accessed ###
  6788. U.  keybase%=!keyanchor%(0):avail%=!keybase%
  6789. V(  REC%=!(keybase%+avail%+8+KL%(0)+1)
  6790. read(fields%,
  6791. ,RA%,$database%)
  6792.  7:$RecInfo%=$Subfile%(file%)+" Record="+
  6793. (REC%)+". (New)"
  6794.   REC%=
  6795. rec_no(k$,key%,P%)
  6796. read(fields%,
  6797. ,REC%,$database%)
  6798.   key$(key%)=k$
  6799. k$)="#"
  6800.     k$=
  6801. `>  $RecInfo%=$Subfile%(file%)+" Record="+
  6802. (REC%)+" Key="+k$
  6803. Lastwritable%=starthere%
  6804. c&L%=
  6805. text_length(mainW%,starthere%)
  6806.  Access% 
  6807. set_caret(mainW%,starthere%)
  6808. identify_field(starthere%)
  6809. changed%=
  6810. update_calcs(0)
  6811. g*logentry$=$Subfile%(file%)+" "+
  6812. key(0)
  6813.  altered% 
  6814. $RecInfo%)<>"*" 
  6815.  $RecInfo%+=" *"
  6816. redraw(mainW%)
  6817.  -------------------- Icon colours -------------------------------
  6818. colour(key%,type%)
  6819.  J%=0 
  6820.  KF%(key%,J%)>0 
  6821. change_field_cols(key%,type%,J%)
  6822. change_field_cols(key%,type%,fld%)
  6823. col%=fcol%(type%*2)
  6824.  type%=0 
  6825.  key%>0 
  6826.  (key%=0 
  6827.  fcol%(0)=(winback%<<4)+7) 
  6828. set_icon_cols(mainW%,desc%(KF%(key%,fld%)),col%)
  6829. col%=fcol%(type%*2+1)
  6830. y7col2%=
  6831. get_icon_cols(mainW%,field%(KF%(key%,fld%)))
  6832.  (col2% 
  6833.  %1111)<>fcol%(6) 
  6834.  type%=0 
  6835.  key%>0 
  6836.  (key%=0 
  6837.  fcol%(1)=&07) 
  6838. set_icon_cols(mainW%,field%(KF%(key%,fld%)),col%)
  6839. get_icon_cols(wi%,ic%)
  6840. ;!block%=wi%:block%!4=ic%:
  6841.  "Wimp_GetIconState",,block%
  6842. =block%?27
  6843. set_icon_cols(wi%,ic%,col%)
  6844. D!block%=wi%:block%!4=ic%:block%!8=(col%<<24):block%!12=&FF000000
  6845.  "Wimp_SetIconState",,block%
  6846. read_colours(f$)
  6847.  ic%=0 
  6848. #F,fcol%(ic%)
  6849. ncol%()=fcol%()
  6850. close_file(F)
  6851. write_colours
  6852. ($database%+".Colours")
  6853.  ic%=0 
  6854. #F,fcol%(ic%)
  6855. close_file(F)
  6856. find(S$,key%,m%,disp%)
  6857.  P%,F%,H%,num%,abort%,cond$
  6858.  case%(key%) 
  6859. u(S$)
  6860. S$,1)="#" 
  6861. check_change
  6862.   REC%=
  6863. S$,2))
  6864.  REC%>=0 
  6865.  REC%<RA% 
  6866. (    
  6867. read(fields%,
  6868. ,REC%,$database%)
  6869. !    S$=key$(key%):H%=1:num%=
  6870. 1    
  6871. select(searchW%,6):
  6872. deselect(searchW%,5)
  6873. $    
  6874. softerror(S$,56):abort%=
  6875. S$,KL%(key%))
  6876.  abort% 
  6877. =addr
  6878. val$=
  6879. type(key%)
  6880.  val$="VAL" 
  6881.   kl%=KL%(key%)
  6882.   S$=
  6883. stripspaces(S$)
  6884.   kl%=
  6885. search(S$,key%,1+H%)
  6886.  P%<0 
  6887. selected(searchW%,6) 
  6888.   F%=file%
  6889.     file%=(file%+1) 
  6890.     top=8*file%+LH%
  6891.      P%=
  6892. search(S$,key%,1+H%)
  6893.  P%>0 
  6894.  file%=F%
  6895.  val$="VAL" 
  6896.  cond$="VAL($(!keyanchor%(key%)+P%+8))=VAL(S$)" 
  6897.  cond$="LEFT$($(!keyanchor%(key%)+P%+8),kl%)=S$"
  6898. matches%=0
  6899.  P%>=0 
  6900.  num%:RecF%=
  6901. :addr=P%
  6902.  P%>=0:RecF%=
  6903. (cond$)
  6904.      P%=
  6905. neighbour(key%,P%,0)
  6906. \  P%=
  6907. neighbour(key%,P%,1):addr=P%:
  6908.  ### Scan back to FIRST match & point addr at it ###
  6909. (cond$)
  6910.     matches%+=1
  6911.      P%=
  6912. neighbour(key%,P%,1)
  6913.  num%:
  6914. softerror("#"+
  6915. (REC%),55)
  6916.  disp% 
  6917.  addr=
  6918. (P%):flash%=KF%(key%,0) 
  6919.  addr=P%
  6920. text(searchW%,7)=
  6921. (matches%)+" found":
  6922. redraw_icon(searchW%,7)
  6923.  disp% 
  6924. display(key%,addr)
  6925.     =addr
  6926. lookup(F%)
  6927.  K%,S$,K$
  6928.  chartype%(F%)>8 
  6929. is_a_key(F%)
  6930.  K%>=0 
  6931.   K$=
  6932. key(K%)
  6933.   addr=
  6934. find(K$,key%,1,
  6935.  addr=
  6936. find($Rf%(F%),key%,1,
  6937. get_it_in(filename$)
  6938.  "OS_File",5,filename$ 
  6939.  d%,,ftype%
  6940. 9ftype%=(ftype%>>8) 
  6941.  &fff:wi%=block%!20:ic%=block%!24
  6942.  ftype% 
  6943.  &7f1:
  6944. load_table(filename$,
  6945.  &7f3:
  6946. load_selection(filename$)
  6947.  &7f4:
  6948. load_query(filename$,wi%,ic%)
  6949.  &7f5:
  6950. get_options(printW%,filename$)
  6951.  &dfe:$
  6952. text(csvW%,13)=filename$:
  6953. start_import("CSV",wi%)
  6954.  &ff9,&aff:
  6955. transfer_blob(block%!20,block%!24,filename$,ftype%)
  6956.  &bc5:
  6957. ready_to_merge(&bc5)
  6958.  &fff:
  6959. /  F=
  6960. (filename$):header$=
  6961. close_file(F)
  6962.  wi% 
  6963. *    
  6964.  mainW%,tableW%(Tablenumber%),-1:
  6965. O      
  6966.  header$="!SCRIPT POWERBASE":
  6967.  present%=7:
  6968. execute_script(filename$)
  6969. S      
  6970.  wi%=mainW% 
  6971.  ic%>0:
  6972. transfer_blob(block%!20,block%!24,filename$,ftype%)
  6973. @      
  6974. text(csvW%,13)=filename$:
  6975. start_import("text",wi%)
  6976.         
  6977. &    
  6978.  customise% 
  6979. special_drop
  6980.  d%=2 
  6981.  wi%=reformW% 
  6982. /      
  6983.  "OS_File",5,filename$+".Form" 
  6984.       
  6985.  d%=1 
  6986. R        $
  6987. text(wi%,7)=filename$:
  6988. redraw_icon(wi%,7):
  6989. icon_bit(22,reformW%,6,
  6990.         
  6991. softerror("",28)
  6992.       
  6993.       
  6994. #      
  6995. leaf(filename$),1) 
  6996.         
  6997.  "!":
  6998. 3        
  6999.  ### Is it an Impression document? ###
  7000. 5        
  7001.  "OS_File",5,filename$+".!DocData" 
  7002.         
  7003.  d%=1 
  7004. $          
  7005. ready_to_merge(&2000)
  7006.           
  7007. 6          
  7008.  ### Is it a Powerbase application? ###
  7009. =          
  7010.  "OS_File",5,filename$+".Colours" 
  7011.  d%,,type%
  7012. %          type%=(type%>>8) 
  7013.  &fff
  7014. #          
  7015.  d%=1 
  7016.  type%=&ffd 
  7017. $            
  7018.  present%>0 
  7019. (            $Title%=
  7020. leaf(filename$)
  7021. &            
  7022. open_files(filename$)
  7023.           
  7024.         
  7025.         
  7026.     7        
  7027.  ### It's an ordinary directory folder ###
  7028. <        
  7029. transfer_blob(block%!20,block%!24,filename$,-1)
  7030.       
  7031.         
  7032. ready_to_merge(doctype%)
  7033.  present%=7 
  7034.    document$=
  7035. leaf(filename$)
  7036. document$,1)="!" 
  7037.  document$=
  7038. document$,2)
  7039. 6  block%!0=256:block%!12=0:block%!16=5:block%!20=0
  7040. 5  block%!24=0:block%!28=0:block%!32=0:block%!36=0
  7041. /  block%!40=doctype%:$(block%+44)=filename$
  7042.  "Wimp_SendMessage",18,block%,0
  7043.   Impref%=block%!8
  7044. softerror("",107)
  7045. open_files(f$)
  7046.  I%,J%,F%,A$
  7047.  ### Delete redundant files if present ###
  7048.  "OS_CLI","Remove "+f$+".Winsize"
  7049.  "OS_CLI","Remove "+f$+".Choices"
  7050. read_sys_vars(f$)
  7051.  "OS_File",5,f$+".Database" 
  7052.  d%=1 
  7053.  present%=present% 
  7054.  "OS_File",5,f$+".PrimaryKey" 
  7055.  d%=1 
  7056.  present%=present% 
  7057.  "OS_File",5,f$+".Form" 
  7058.  d%=1 
  7059.  present%=present% 
  7060.  "OS_File",5,f$+".UsrSprites" 
  7061.  d%,,,,len%
  7062.  d%=1 
  7063. create_named_sliding_block(logoanchor%,len%+8)
  7064. -&  base%=!logoanchor%:!base%=len%+4
  7065.  "OS_File",255,f$+".UsrSprites",base%+4
  7066.   logosloaded%=
  7067. $database%=f$
  7068.  present% 
  7069.  0,1,5:Access%=
  7070. :Modify%=
  7071. resume_opening
  7072. access(f$,accessW%) 
  7073. resume_opening
  7074. wimp_error(
  7075. ,254,0,
  7076. msg("Err24"))
  7077. read_sys_vars(f$)
  7078.  E%,F,A$,L$,S$
  7079. (f$+".!Run")
  7080.   S$=
  7081. S$,"Acl$Dir")>0 
  7082.  A$=S$
  7083. S$,"Log$Dir")>0 
  7084.  L$=S$
  7085. close_file(F)
  7086.  A$="" 
  7087.  A$="Set Acl$Dir "+f$
  7088.  L$="" 
  7089.  L$="Set Log$Dir "+f$
  7090.  "XOS_ReadVarVal","Acl$Dir",,-1 
  7091.  ,,E%:
  7092.  E%=0 
  7093.  "OS_CLI",A$
  7094.  "XOS_ReadVarVal","Log$Dir",,-1 
  7095.  ,,E%:
  7096.  E%=0 
  7097.  "OS_CLI",L$
  7098. access(f$,wi%)
  7099.  L%,P%,keybase%,login%,attempts%
  7100. (f$+".Colours")
  7101.  F=0 
  7102.  fatal_err%,f$+"."+
  7103. msg("Err18")
  7104. #F=35
  7105. #F,S$:$Read%=
  7106. encrypt(S$,
  7107. #F,S$:$Write%=
  7108. encrypt(S$,
  7109. #F,S$:$Manager%=
  7110. encrypt(S$,
  7111.  I%=9 
  7112. select(passW%,I%)
  7113. deselect(passW%,16)
  7114.  I%<17 
  7115. #F,Z%:
  7116. set_icon(passW%,I%,Z%)
  7117.   I%+=1
  7118. close_file(F)
  7119.  "OS_File",5,"<Acl$Dir>.acl" 
  7120.  d%:acl%=(d%=1)
  7121.  $Manager%="" 
  7122.  acl%=
  7123.  Access%=
  7124. :Modify%=
  7125. \9$AccessTitle%="!Powerbase opening "+
  7126. leaf($database%)
  7127.  acl% 
  7128. position_window(wi%,0,0,0,310,0,110):refuse$="Access denied"
  7129. position_window(wi%,0,0,0,200,0,0):refuse$="Password not known"
  7130. a0!block%=wi%:
  7131.  "Wimp_GetWindowState",,block%
  7132.  block%!4,block%!8,block%!12-block%!4,block%!16-block%!8
  7133. d(  cancel%=
  7134. :login%=
  7135. :accessbutton%=0
  7136.   $Password%="":$UserID%=""
  7137. redraw_icon(wi%,1):
  7138. redraw_icon(wi%,0)
  7139. g+  $
  7140. text(wi%,5)="Type in your password"
  7141.  acl% 
  7142. set_caret(wi%,0) 
  7143. set_caret(wi%,1)
  7144.  accessbutton%>0
  7145.  accessbutton% 
  7146.  2:cancel%=
  7147. o+    password$=$Password%:user$=$UserID%
  7148.  acl% 
  7149.       F=
  7150. ("<Acl$Dir>.acl")
  7151.       
  7152. s!        
  7153. #F,id$,personal$,pw%
  7154. tX        
  7155.  id$=
  7156. encrypt(user$,
  7157.  personal$=
  7158. encrypt(password$,
  7159.  pw%>0 
  7160.  login%=
  7161.       
  7162.  login% 
  7163.       
  7164. close_file(F)
  7165.       
  7166.       user$="<none>"
  7167.       
  7168.  password$ 
  7169. z&        
  7170.  $Manager%:pw%=3:login%=
  7171. {$        
  7172.  $Write%:pw%=2:login%=
  7173. |#        
  7174.  $Read%:pw%=1:login%=
  7175.       
  7176. ~        
  7177.  (login% 
  7178.  cancel%) 
  7179.     $
  7180. text(wi%,5)=refuse$
  7181. !    
  7182. set_icon_cols(wi%,5,&1B)
  7183.     delay%=
  7184.         
  7185.       
  7186. >delay%
  7187. !    
  7188. set_icon_cols(wi%,5,&17)
  7189.     attempts%+=1
  7190. R    att$(attempts%)=
  7191. (attempts%)+","+
  7192. leaf($database%)+","+user$+","+password$
  7193.  login% 
  7194.  cancel% 
  7195.  attempts%=3
  7196. getscreensize(W%,H%,V%)
  7197. #Access%=(pw%>1):Modify%=(pw%>2)
  7198. close_window(wi%)
  7199.  0,0,W%,H%
  7200.  attempts%=3 
  7201. "  user$="<unrecognised>":pw%=0
  7202. open_log("<Log$Dir>.Log",
  7203.  I%=1 
  7204. /    
  7205. write_log(-1,
  7206. msg("Err122,"+att$(I%)))
  7207. close_log("<Log$Dir>.Log")
  7208. close_down
  7209. =login%
  7210. resume_opening
  7211.  "OS_Byte",202,kbdstatus%
  7212.  "Hourglass_On"
  7213. selected(passW%,16) 
  7214. open_log("<Log$Dir>.Log",
  7215. ($database%+".Subfiles")
  7216.  I%=0 
  7217. *    
  7218.  0:$Subfile%(I%)="Subfile "+
  7219.     S$=
  7220. %    
  7221.  S$="" 
  7222.  S$="Subfile "+
  7223.     $Subfile%(I%)=S$
  7224. close_file(F)
  7225.  "OS_File",5,f$+".UserFuncs" 
  7226.  d%=1 
  7227.  f$+".UserFuncs"
  7228. read_colours($database%+".Colours")
  7229.  "OS_File",5,f$+".PrintRes.PrtOptions" 
  7230.  d%=1 
  7231. get_options(printW%,f$+".PrintRes.PrtOptions")
  7232. get_options(printW%,"<Pbase$Dir>.Resources.PrtOptions")
  7233.  "OS_File",5,f$+".Preference" 
  7234.  d%=1 
  7235. get_preferences(prefsW%,f$+".Preference")
  7236. deselect(prefsW%,36):
  7237. select(prefsW%,35):
  7238. icon_bit(22,prefsW%,35,
  7239. f$,3)="RAM" 
  7240.  ram%=
  7241.  "OS_CLI","Set Alias$Indices Filer_OpenDir "+$database%+".Indices"
  7242.  "OS_CLI","Set Alias$Tables Filer_OpenDir "+$database%+".ValTables"
  7243.  "OS_CLI","Set Alias$Resources Filer_OpenDir "+$database%+".PrintRes"
  7244.  "OS_CLI","Set Alias$JobsDone Filer_OpenDir "+$database%+".PrintJobs"
  7245. icon_bit(22,csvW%,18,Modify%)
  7246. icon_bit(22,csvW%,17,Access%)
  7247. icon_bit(22,printW%,50,Modify%)
  7248. icon_bit(22,printW%,49,Access%)
  7249. icon_bit(22,prefsW%,38,Modify%)
  7250. lit(menu%(0),1,
  7251. lit(menu%(0),2,Modify%)
  7252. lit(menu%(0),3,
  7253. lit(menu%(0),5,Modify%)
  7254. lit(menu%(1),6,
  7255. selected(passW%,9))
  7256. lit(menu%(7),0,Access%)
  7257. lit(menu%(7),1,Modify%)
  7258. lit(menu%(7),2,Access%)
  7259. lit(menu%(7),3,Access%)
  7260. lit(menu%(7),4,Access%)
  7261. lit(menu%(2),0,Access%)
  7262. lit(menu%(10),0,Access%)
  7263. lit(menu%(10),2,Access%)
  7264. lit(menu%(10),3,Access%)
  7265. lit(menu%(17),0,Access%)
  7266. lit(menu%(17),3,Access%)
  7267. lit(menu%(3),0,((present% 
  7268.  4)>0))
  7269. lit(menu%(9),1,((present% 
  7270.  4)=0))
  7271.  I%=1 
  7272. lit(menu%(3),I%,(present%=7))
  7273. limit_actions(Access%)
  7274.  present%<4 
  7275.  design%=
  7276.  present%=5 
  7277. adjust_on(
  7278. lit(menu%(9),5,
  7279. fields%=
  7280. get_form(Fptr%)
  7281. 0chartype%(0)=100:chartype%(MaxFields%+1)=100
  7282.  fields%>0 
  7283. >  starthere%=field%(
  7284. first_field):Lastwritable%=starthere%
  7285. %  fieldmenu%=
  7286. field_menu(fields%)
  7287. create_named_sliding_block(transanchor%,Length%+1)
  7288.  adjust% 
  7289. lit(menu%(9),2,(fields%>0))
  7290.  present% 
  7291. -  $RecInfo%="No record design exists yet"
  7292.  I%=1 
  7293. lit(menu%(9),I%,
  7294. get_winpos
  7295.  !formanchor%=0 
  7296. 2    
  7297. extend_named_sliding_block(formanchor%,0)
  7298.     Fptr%=!formanchor%
  7299.      fields%=0:Fieldnumber%=0
  7300. 8  $RecInfo%="Record design exists, but no datafiles"
  7301. first_field>0 
  7302. lit(menu%(9),3,
  7303. lit(menu%(9),4,
  7304. get_winpos
  7305. 6  $RecInfo%="No primary key index file exists yet"
  7306.  "OS_File",5,$database%+".Database" 
  7307.  ,,,,len%
  7308. -  RA%=(len% 
  7309.  Length%)-1:$Records%=
  7310. (RA%)
  7311. first_field>0 
  7312. get_winpos
  7313. lit(menu%(1),8,
  7314. selected(passW%,13))
  7315. lit(menu%(1),9,
  7316. selected(passW%,13))
  7317. lit(menu%(1),2,
  7318. selected(passW%,14))
  7319.  "OS_File",5,$database%+".Database" 
  7320.  ,,,,len%
  7321. -  RA%=(len% 
  7322.  Length%)-1:$Records%=
  7323. (RA%)
  7324.  (len% 
  7325.  Length%)<>0 
  7326. rectify
  7327. open_index($database%+".PrimaryKey",0,
  7328. $  key%=0:file%=0:top=8*file%+LH%
  7329. #  $Subfilename%=$Subfile%(key%)
  7330. set_keydata(key%)
  7331. Z  keybase%=!keyanchor%(0):
  7332.  keybase%!4>0 
  7333.  $Increment%=
  7334. (keybase%!4) 
  7335.  $Increment%="0"
  7336. ,  f$=$database%+".Indices":R4%=0:Keys%=0
  7337.  R4%<>-1
  7338.     Keys%+=1
  7339. 5    
  7340.  "OS_GBPB",9,f$,block%,1,R4%,11 
  7341.  ,,K$,,R4%
  7342.     C    
  7343.  R4%<>-1 
  7344. open_index(f$+"."+K$,Keys%,
  7345. colour(Keys%,2)
  7346.   Keys%-=1
  7347.  extrakeys$<>"" 
  7348. softerror(
  7349. extrakeys$),96)
  7350. colour(0,0):
  7351. colour(0,1)
  7352. get_tables
  7353.   key%=0
  7354. count(key%,RU%):
  7355. update_stats
  7356. get_winpos
  7357. load_calcs
  7358. auto_csv(
  7359. selected(prefsW%,44))
  7360.   addr=
  7361. moveto(key%,top,1)
  7362.  "Hourglass_Off"
  7363. $dbase%=
  7364. $Title%,2)
  7365. redraw_icon(-2,pbaseicon%)
  7366. f$=$database%+".CSVoptions"
  7367.  "OS_File",5,f$ 
  7368.  d%=1 
  7369. get_csv_options(f$)
  7370. make_user_menus
  7371.  "OS_File",5,$database%+".Special" 
  7372.  d%=1 
  7373.  $database%+".Special":
  7374. customise
  7375. rectify
  7376.  REC%,I%,J%,F$
  7377. REC%=-1
  7378. %*dbasehandle%=
  7379. ($database%+".Database")
  7380.  REC%<RA% 
  7381. (F$)<>0
  7382.   REC%+=1
  7383. #dbasehandle%=Length%*REC%
  7384.   F$=
  7385. #dbasehandle%
  7386. (F$)=0 
  7387. softerror("",109)
  7388. #dbasehandle%=REC%*Length%
  7389.  "Hourglass_On"
  7390.  I%=REC% 
  7391. 0!    
  7392. #dbasehandle%=I%*Length%
  7393.  J%=1 
  7394.  fields%
  7395.       
  7396. #dbasehandle%,""
  7397. 4>    
  7398.  "Hourglass_Percentage",((I%-REC%)*100) 
  7399.  (RA%-REC%)
  7400.  "Hourglass_Off"
  7401.  RA%+=1
  7402. #dbasehandle%=(RA%+1)*Length%
  7403. close_file(dbasehandle%)
  7404. val(keypadW%,17)
  7405. $,5,6)="01 Apr" 
  7406. $,17,2)<"12" 
  7407. @!  S$="Stoilet"+
  7408. $block%!32,8)
  7409.  S$="Sdelete"+
  7410. $block%!32,8)
  7411. val(keypadW%,17)=S$
  7412. get_options(wi%,f$)
  7413.  F,S$,C$,P%
  7414. J2  S$=
  7415. #F:P%=
  7416. S$," "):C$=
  7417. S$,P%+1):S$=
  7418. S$,P%-1)
  7419.  "Destination":
  7420. M+    
  7421. deselect(wi%,
  7422. selected_esg(wi%,4))
  7423. O$      
  7424.  "window":
  7425. select(wi%,38)
  7426. P"      
  7427.  "file":
  7428. select(wi%,39)
  7429. Q%      
  7430.  "printer":
  7431. select(wi%,41)
  7432. R        
  7433.  "Headings":
  7434. T+    
  7435. deselect(wi%,
  7436. selected_esg(wi%,1))
  7437. U;    
  7438.  C$="descriptor" 
  7439. select(wi%,2) 
  7440. select(wi%,1)
  7441.  "Pitch":
  7442. W+    
  7443. deselect(wi%,
  7444. selected_esg(wi%,2))
  7445.       
  7446.  "5":
  7447. select(wi%,4)
  7448.       
  7449.  "10":
  7450. select(wi%,7)
  7451.       
  7452.  "12":
  7453. select(wi%,8)
  7454.       
  7455.  "17":
  7456. select(wi%,6)
  7457. ]        
  7458.  "Format":
  7459. _+    
  7460. deselect(wi%,
  7461. selected_esg(wi%,3))
  7462. C$,6) 
  7463. a#      
  7464.  "horiz":
  7465. select(wi%,23)
  7466. b"      
  7467.  "vert":
  7468. select(wi%,24)
  7469.       
  7470.  "column":
  7471. d/      
  7472. select(wi%,25):$
  7473. text(wi%,15)=
  7474. C$,7)
  7475. e#      
  7476.  "label":
  7477. select(wi%,26)
  7478. f        
  7479. g.    
  7480. icon_bit(22,wi%,15,
  7481. selected(wi%,25))
  7482. hB    
  7483. icon_bit(22,wi%,43,
  7484. selected(wi%,25) 
  7485. selected(wi%,23))
  7486. i.    
  7487. icon_bit(22,wi%,45,
  7488. selected(wi%,25))
  7489. j.    
  7490.  "Expand":
  7491. set_icon(wi%,11,(C$="ON"))
  7492. k1    
  7493.  "Underline":
  7494. set_icon(wi%,29,(C$="ON"))
  7495. l1    
  7496.  "Uppercase":
  7497. set_icon(wi%,12,(C$="ON"))
  7498. m.    
  7499.  "Header":
  7500. set_icon(wi%,47,(C$="ON"))
  7501. n-    
  7502.  "Page1":
  7503. set_icon(wi%,10,(C$="ON"))
  7504. o.    
  7505.  "Footer":
  7506. set_icon(wi%,48,(C$="ON"))
  7507. p,    
  7508.  "Date":
  7509. set_icon(wi%,19,(C$="ON"))
  7510. q.    
  7511.  "Shrink":
  7512. set_icon(wi%,40,(C$="ON"))
  7513. r/    
  7514.  "Control":
  7515. set_icon(wi%,42,(C$="ON"))
  7516. s2    
  7517.  "PageNumber":
  7518. set_icon(wi%,54,(C$="ON"))
  7519. t(    
  7520.  "PageLength":$
  7521. text(wi%,16)=C$
  7522. u'    
  7523.  "LineSpace":$
  7524. text(wi%,17)=C$
  7525. v%    
  7526.  "Lmargin":$
  7527. text(wi%,30)=C$
  7528. w%    
  7529.  "Tmargin":$
  7530. text(wi%,32)=C$
  7531. x#    
  7532.  "Title":$
  7533. text(wi%,18)=C$
  7534. y'    
  7535.  "TextWidth":$
  7536. text(wi%,34)=C$
  7537. z*    
  7538.  "ColumnSpacer":$
  7539. text(wi%,43)=C$
  7540. {)    
  7541.  "ColumnWidth":$
  7542. text(wi%,45)=C$
  7543.  "LabelRowOf":
  7544. }3    
  7545. deselect(labelW%,
  7546. selected_esg(labelW%,1))
  7547. ~     
  7548. select(labelW%,
  7549. (C$)-1)
  7550. +    
  7551.  "LabelWidth":$
  7552. text(labelW%,4)=C$
  7553. ,    
  7554.  "LabelHeight":$
  7555. text(labelW%,6)=C$
  7556. ,    
  7557.  "LabelLines":$
  7558. text(labelW%,10)=C$
  7559. -    
  7560.  "LabelCopies":$
  7561. text(labelW%,17)=C$
  7562. n    
  7563.  "Substitute":
  7564. C$,4)="SUBS" 
  7565. select(labelW%,11):$
  7566. text(labelW%,12)=
  7567. C$,5) 
  7568. deselect(labelW%,11)
  7569. 4    
  7570.  "PrintKey":
  7571. set_icon(labelW%,13,(C$="ON"))
  7572. 5    
  7573.  "SkipBlank":
  7574. set_icon(labelW%,16,(C$="ON"))
  7575. close_file(F)
  7576. save_options(wi%,f$)
  7577. selected_esg(wi%,4) 
  7578.  38:C$="window"
  7579.  39:C$="file"
  7580.  41:C$="printer"
  7581. #F,"Destination "+C$
  7582. selected_esg(wi%,1) 
  7583.  1:C$="tag"
  7584.  2:C$="descriptor"
  7585. #F,"Headings "+C$
  7586. selected_esg(wi%,2) 
  7587.  4:C$="5"
  7588.  7:C$="10"
  7589.  8:C$="12"
  7590.  6:C$="17"
  7591. #F,"Pitch "+C$
  7592. selected_esg(wi%,3) 
  7593.  23:C$="horiz"
  7594.  24:C$="vert"
  7595.  25:C$="column"+$
  7596. text(wi%,15)
  7597.  26:C$="label"
  7598. #F,"Format "+C$
  7599. selected(wi%,11) 
  7600.  C$="ON" 
  7601.  C$="OFF"
  7602. #F,"Expand "+C$
  7603. selected(wi%,29) 
  7604.  C$="ON" 
  7605.  C$="OFF"
  7606. #F,"Underline "+C$
  7607. selected(wi%,12) 
  7608.  C$="ON" 
  7609.  C$="OFF"
  7610. #F,"Uppercase "+C$
  7611. selected(wi%,47) 
  7612.  C$="ON" 
  7613.  C$="OFF"
  7614. #F,"Header "+C$
  7615. selected(wi%,10) 
  7616.  C$="ON" 
  7617.  C$="OFF"
  7618. #F,"Page1 "+C$
  7619. selected(wi%,48) 
  7620.  C$="ON" 
  7621.  C$="OFF"
  7622. #F,"Footer "+C$
  7623. selected(wi%,19) 
  7624.  C$="ON" 
  7625.  C$="OFF"
  7626. #F,"Date "+C$
  7627. selected(wi%,40) 
  7628.  C$="ON" 
  7629.  C$="OFF"
  7630. #F,"Shrink "+C$
  7631. selected(wi%,42) 
  7632.  C$="ON" 
  7633.  C$="OFF"
  7634. #F,"Control "+C$
  7635. selected(wi%,54) 
  7636.  C$="ON" 
  7637.  C$="OFF"
  7638. #F,"PageNumber "+C$
  7639. #F,"PageLength "+$
  7640. text(wi%,16)
  7641. #F,"LineSpace "+$
  7642. text(wi%,17)
  7643. #F,"Lmargin "+$
  7644. text(wi%,30)
  7645. #F,"Tmargin "+$
  7646. text(wi%,32)
  7647. #F,"Title "+$
  7648. text(wi%,18)
  7649. #F,"TextWidth "+$
  7650. text(wi%,34)
  7651. #F,"ColumnSpacer "+$
  7652. text(wi%,43)
  7653. #F,"ColumnWidth "+$
  7654. text(wi%,45)
  7655. selected_esg(labelW%,1)+1)
  7656. #F,"LabelRowOf "+C$
  7657. #F,"LabelWidth "+$
  7658. text(labelW%,4)
  7659. #F,"LabelHeight "+$
  7660. text(labelW%,6)
  7661. #F,"LabelLines "+$
  7662. text(labelW%,10)
  7663. #F,"LabelCopies "+$
  7664. text(labelW%,17)
  7665. selected(labelW%,11) 
  7666.  C$="SUBS"+$
  7667. text(labelW%,12) 
  7668.  C$="OFF"
  7669. #F,"Substitute "+C$
  7670. selected(labelW%,13) 
  7671.  C$="ON" 
  7672.  C$="OFF"
  7673. #F,"PrintKey "+C$
  7674. selected(labelW%,16) 
  7675.  C$="ON" 
  7676.  C$="OFF"
  7677. #F,"SkipBlank "+C$
  7678. close_file(F)
  7679.  "OS_File",18,f$,&7f5
  7680. get_preferences(wi%,f$)
  7681.  F,S$,C$,P%
  7682. 2  S$=
  7683. #F:P%=
  7684. S$," "):C$=
  7685. S$,P%+1):S$=
  7686. S$,P%-1)
  7687. &    
  7688.  "DateSeparator":$datesep%=C$
  7689. &    
  7690.  "TimeSeparator":$timesep%=C$
  7691.  "WildcardS":$wc%=C$
  7692.  "WildcardM":$ws%=C$
  7693. 3    
  7694.  "Recalculate":
  7695. set_icon(wi%,14,(C$="ON"))
  7696. >    
  7697.  "NewCopy":kill%=(C$<>"ON"):
  7698. set_icon(wi%,12,
  7699.  kill%)
  7700. S    
  7701.  "CaseSpecific":
  7702. set_icon(wi%,30,(C$="ON")):
  7703. set_icon(queryW%,1,(C$="ON"))
  7704. 3    
  7705.  "BlankRecord":
  7706. set_icon(wi%,15,(C$="ON"))
  7707. 6    
  7708.  "MoveDescriptor":
  7709. set_icon(wi%,16,(C$="ON"))
  7710. A    
  7711.  "ImpulseClient":$mergewith%=C$:$ImpulseApp%=$mergewith%
  7712. 0    
  7713.  "Validate":
  7714. set_icon(wi%,21,(C$="ON"))
  7715. 2    
  7716.  "ShowLinked":
  7717. set_icon(wi%,19,(C$="ON"))
  7718. /    
  7719.  "Warning":
  7720. set_icon(wi%,20,(C$="ON"))
  7721.  "Autosave":
  7722. +    
  7723. deselect(wi%,
  7724. selected_esg(wi%,2))
  7725. C$,4) 
  7726. -      
  7727.  "OFF":autosave%=0:$Interval%="10"
  7728. 0      
  7729.  "WARN":autosave%=1:$Interval%=
  7730. C$,5)
  7731. 0      
  7732.  "AUTO":autosave%=2:$Interval%=
  7733. C$,5)
  7734.         
  7735. !    
  7736. select(wi%,29-autosave%)
  7737. +    
  7738. icon_bit(22,wi%,25,(autosave%<>0))
  7739.  "Autobalance":
  7740. C$,4) 
  7741. -      
  7742.  "OFF":autobalance%=
  7743. :$Every%="25"
  7744. 0      
  7745.  "AUTO":$Every%=
  7746. C$,5):autobalance%=
  7747.         
  7748. M    
  7749. set_icon(wi%,31,autobalance%):
  7750. icon_bit(22,wi%,32,
  7751. selected(wi%,31))
  7752. _    
  7753.  "Duplication":
  7754. set_icon(wi%,34,C$="ON"):
  7755. icon_bit(22,prefsW%,34,
  7756. selected(passW%,15))
  7757. 3    
  7758.  "DefaultAction":
  7759. set_icon(wi%,41,C$="ON")
  7760. 1    
  7761.  "StripSpaces":
  7762. set_icon(wi%,42,C$="ON")
  7763. 3    
  7764.  "RememberPlace":
  7765. set_icon(wi%,43,C$="ON")
  7766. -    
  7767.  "AutoCSV":
  7768. set_icon(wi%,44,C$="ON")
  7769. close_file(F)
  7770. save_preferences(wi%,f$)
  7771.  F,C$
  7772. #F,"DateSeparator "+$datesep%
  7773. #F,"TimeSeparator "+$timesep%
  7774. #F,"WildcardS "+$wc%
  7775. #F,"WildcardM "+$ws%
  7776. #F,"ImpulseClient "+$mergewith%
  7777. selected(wi%,12) 
  7778.  C$="ON" 
  7779.  C$="OFF"
  7780. #F,"NewCopy "+C$
  7781. selected(wi%,30) 
  7782.  C$="ON" 
  7783.  C$="OFF"
  7784. #F,"CaseSpecific "+C$
  7785. selected(wi%,14) 
  7786.  C$="ON" 
  7787.  C$="OFF"
  7788. #F,"Recalculate "+C$
  7789. selected(wi%,15) 
  7790.  C$="ON" 
  7791.  C$="OFF"
  7792. #F,"BlankRecord "+C$
  7793. selected(wi%,16) 
  7794.  C$="ON" 
  7795.  C$="OFF"
  7796. #F,"MoveDescriptor "+C$
  7797. selected(wi%,21) 
  7798.  C$="ON" 
  7799.  C$="OFF"
  7800. #F,"Validate "+C$
  7801. selected(wi%,19) 
  7802.  C$="ON" 
  7803.  C$="OFF"
  7804. #F,"ShowLinked "+C$
  7805. selected(wi%,20) 
  7806.  C$="ON" 
  7807.  C$="OFF"
  7808. #F,"Warning "+C$
  7809.  autosave% 
  7810.  0:C$="OFF"
  7811.  1:C$="WARN"+$Interval%
  7812.  2:C$="AUTO"+$Interval%
  7813. #F,"Autosave "+C$
  7814.  autobalance% 
  7815. :C$="OFF"
  7816. :C$="AUTO"+$Every%
  7817. #F,"Autobalance "+C$
  7818. selected(prefsW%,34) 
  7819.  C$="ON" 
  7820.  C$="OFF"
  7821. #F,"Duplication "+C$
  7822. selected(prefsW%,41) 
  7823.  C$="ON" 
  7824.  C$="OFF"
  7825. #F,"DefaultAction "+C$
  7826. selected(prefsW%,42) 
  7827.  C$="ON" 
  7828.  C$="OFF"
  7829. #F,"StripSpaces "+C$
  7830. selected(prefsW%,43) 
  7831.  C$="ON" 
  7832.  C$="OFF"
  7833. #F,"RememberPlace "+C$
  7834. selected(prefsW%,44) 
  7835.  C$="ON" 
  7836.  C$="OFF"
  7837. #F,"AutoCSV "+C$
  7838. close_file(F)
  7839.  "OS_File",18,f$,&fff
  7840. get_csv_options(f$)
  7841.  F,S$,C$,P%
  7842. 42  S$=
  7843. #F:P%=
  7844. S$," "):C$=
  7845. S$,P%+1):S$=
  7846. S$,P%-1)
  7847.  "Separator":
  7848.     $Delim%=""
  7849. 9!      
  7850.  "Comma":sep$=",":P%=0
  7851. :       
  7852.  "TAB":sep$=
  7853. (9):P%=1
  7854. ;       
  7855.  "CR":sep$=
  7856. (13):P%=2
  7857. <       
  7858.  "LF":sep$=
  7859. (10):P%=3
  7860. =#      
  7861.  $Delim%=C$:sep$=C$:P%=4
  7862. >        
  7863. ?#    
  7864. tick_one(menu%(15),0,3,P%)
  7865. @2    $
  7866. text(csvW%,14)=C$:
  7867. redraw_icon(csvW%,14)
  7868.  "Terminator":
  7869.     $Termin%=""
  7870. D!      
  7871.  "CR":term$=
  7872. (13):P%=0
  7873. E!      
  7874.  "LF":term$=
  7875. (10):P%=1
  7876. F*      
  7877.  "CR LF":term$=
  7878. (13)+
  7879. (10):P%=2
  7880. G*      
  7881.  "LF CR":term$=
  7882. (10)+
  7883. (13):P%=3
  7884. H*      
  7885.  "CR CR":term$=
  7886. (13)+
  7887. (13):P%=4
  7888. I*      
  7889.  "LF LF":term$=
  7890. (10)+
  7891. (10):P%=5
  7892. J&      
  7893. : $Termin%=C$:term$=C$:P%=6
  7894. K        
  7895. L#    
  7896. tick_one(menu%(20),0,5,P%)
  7897. M2    $
  7898. text(csvW%,15)=C$:
  7899. redraw_icon(csvW%,15)
  7900. N-    
  7901.  "Quotes":
  7902. set_icon(csvW%,0,C$="ON")
  7903. O-    
  7904.  "Header":
  7905. set_icon(csvW%,1,C$="ON")
  7906. P-    
  7907.  "Blanks":
  7908. set_icon(csvW%,2,C$="ON")
  7909. Q*    
  7910.  "Key":
  7911. set_icon(csvW%,3,C$="ON")
  7912. R-    
  7913.  "RecNo":
  7914. set_icon(csvW%,22,C$="ON")
  7915. SB    
  7916.  "Data":
  7917. set_icon(csvW%,4,(C$="ON" 
  7918. selected(csvW%,1)))
  7919. T/    
  7920.  "Display":
  7921. set_icon(csvW%,11,C$="ON")
  7922. U-    
  7923.  "Strip":
  7924. set_icon(csvW%,16,C$="ON")
  7925. V.    
  7926.  "NewSeq":
  7927. set_icon(csvW%,23,C$="ON")
  7928. icon_bit(22,csvW%,4,(
  7929. selected(csvW%,1)))
  7930. close_file(F)
  7931. save_csv_options(f$)
  7932.  F,C$
  7933. selected(csvW%,0) 
  7934.  C$="ON" 
  7935.  C$="OFF"
  7936. #F,"Quotes "+C$
  7937. selected(csvW%,1) 
  7938.  C$="ON" 
  7939.  C$="OFF"
  7940. #F,"Header "+C$
  7941. selected(csvW%,2) 
  7942.  C$="ON" 
  7943.  C$="OFF"
  7944. #F,"Blanks "+C$
  7945. selected(csvW%,3) 
  7946.  C$="ON" 
  7947.  C$="OFF"
  7948. #F,"Key "+C$
  7949. selected(csvW%,22) 
  7950.  C$="ON" 
  7951.  C$="OFF"
  7952. #F,"RecNo "+C$
  7953. selected(csvW%,4) 
  7954.  C$="ON" 
  7955.  C$="OFF"
  7956. #F,"Data "+C$
  7957.  sep$ 
  7958.  ",":C$="Comma"
  7959. (9):C$="TAB"
  7960. (10):C$="LF"
  7961. (13):C$="CR"
  7962. :C$=sep$
  7963. #F,"Separator "+C$
  7964.  term$ 
  7965. (13):C$="CR"
  7966. (10):C$="LF"
  7967. (13)+
  7968. (10):C$="CR LF"
  7969. (10)+
  7970. (13):C$="LF CR"
  7971. (13)+
  7972. (13):C$="CR CR"
  7973. (10)+
  7974. (10):C$="LF LF"
  7975. :C$=term$
  7976. #F,"Terminator "+C$
  7977. selected(csvW%,11) 
  7978.  C$="ON" 
  7979.  C$="OFF"
  7980. #F,"Display "+C$
  7981. selected(csvW%,16) 
  7982.  C$="ON" 
  7983.  C$="OFF"
  7984. #F,"Strip "+C$
  7985. selected(csvW%,23) 
  7986.  C$="ON" 
  7987.  C$="OFF"
  7988. #F,"NewSeq "+C$
  7989. close_file(F)
  7990.  "OS_File",18,f$,&fff
  7991. open_index(f$,key%,merge%)
  7992.  keybase%,I%
  7993.  key%>MaxKeys% 
  7994.  merge% 
  7995.  extrakeys$+=
  7996. leaf(f$)+",":Keys%-=1:
  7997.  keyanchor%(key%) 
  7998. scrap_sliding_block(keyanchor%(key%))
  7999.  "OS_File",5,f$ 
  8000.  ,,,,len%
  8001. create_named_sliding_block(keyanchor%(key%),len%)
  8002.  "OS_File",255,f$,!keyanchor%(key%)
  8003. Index$(key%)=
  8004. leaf(f$)
  8005. keybase%=!keyanchor%(key%)
  8006.  key%=0 
  8007.  I%=0 
  8008. %    $Date%(I%)=$(keybase%+8+9*I%)
  8009. KL%(key%)=keybase%?70
  8010.  I%=0 
  8011. &  KW%(key%,I%)=!(keybase%+74+I%*4)
  8012. +  KF%(key%,I%)=(KW%(key%,I%)>>24) 
  8013. !case%(key%)=(keybase%?71=255)
  8014. %incspace%(key%)=(keybase%?72=255)
  8015. !null%(key%)=(keybase%?73=255)
  8016.  keybase%!62>0 
  8017.  ### Old key structure applies ###
  8018.   words%=
  8019.  I%=0 
  8020.  KW%(key%,I%)>0 
  8021. "      KF%(key%,I%)=keybase%!62
  8022. K      KW%(key%,I%)=!(keybase%+74+I%*4)+((I%+1)<<16)+((keybase%!62)<<24)
  8023.       words%=
  8024.         
  8025.  words% 
  8026.  KF%(key%,0)=keybase%!62:KW%(key%,0)=KL%(key%)+((keybase%!62)<<24)
  8027.  keybase%!66>0 
  8028.  I%=1 
  8029.       
  8030.  KW%(key%,I%)>0 
  8031. $        KF%(key%,I%)=keybase%!66
  8032. I        KW%(key%,I%)=!(keybase%+74+I%*4)+(I%<<16)+((keybase%!66)<<24)
  8033.       
  8034. get_tables
  8035.  lk,F%,d%,R4%,f$,name$,subst%,field%,exact%
  8036. $f$=$database%+".ValTables":R4%=0
  8037. close_file(lk):
  8038. wimp_error(
  8039. ($database%+".Link")
  8040.  lk>0 
  8041.   !block%=mainW%
  8042.     F%+=1
  8043. #lk,link$(F%)
  8044.     name$=link$(F%)
  8045. -    field%=
  8046. trailing_number(name$,exact%)
  8047. name$,1)<>"@" 
  8048.       
  8049.  name$<>"" 
  8050. )        subst%=
  8051. leading_number(name$)
  8052. ,        
  8053.  "OS_File",5,f$+"."+name$ 
  8054.         
  8055.  d%=1 
  8056. )          
  8057. load_table(f$+"."+name$,
  8058. 8          
  8059. set_icon_cols(mainW%,field%(F%),fcol%(6))
  8060. $          
  8061. softerror(name$,31)
  8062.         
  8063.       
  8064.         
  8065.   link$(0)="LOADED"
  8066. close_file(lk)
  8067.  ### Force loading of unlinked but flagged tables ###
  8068.  R4%<>-1
  8069.  "OS_GBPB",9,f$,block%,1,R4%,11 
  8070.  ,,name$,,R4%
  8071.  R4%<>-1 
  8072. name$)="!" 
  8073. load_table(f$+"."+name$,
  8074.  extratabs$<>"" 
  8075. softerror(
  8076. extratabs$),97)
  8077. load_calcs
  8078.  I%,F%,F1%,P%,calc$,file%,top
  8079. update$()=""
  8080. ($database%+".Calc")
  8081.  cl>0 
  8082. +    F%+=1:F$=
  8083. ~(F%):
  8084.  F%<16 
  8085.  F$="0"+F$
  8086. "    
  8087. #cl,calc$:calc$(F%)=calc$
  8088.  chartype%(F%) 
  8089.       
  8090.  6,7:
  8091.       
  8092. !        P%=
  8093. calc$,"$Rf%(",P%)
  8094. ?        
  8095.  P%>0 
  8096.  F1%=
  8097. calc$,P%+5)):update$(F1%)+=F$:P%+=5
  8098.       
  8099.  P%=0
  8100.       
  8101.          P%=
  8102. calc$,"FNn(",P%)
  8103. ?        
  8104.  P%>0 
  8105.  F1%=
  8106. calc$,P%+4)):update$(F1%)+=F$:P%+=4
  8107.       
  8108.  P%=0
  8109. .      
  8110. calc$,"TIME$")>0 
  8111.  update$(0)+=F$
  8112.         
  8113.   calc$(0)="LOADED"
  8114. close_file(cl)
  8115. selected(prefsW%,14) 
  8116.  update$(0)<>"" 
  8117. ,  dbasehandle%=
  8118. ($database%+".Database")
  8119.  file%=0 
  8120.     top=8*file%+LH%
  8121. !    P%=
  8122. neighbour(key%,top,1)
  8123. *    
  8124. scan_file("P%<>top",key%,file%,6)
  8125.  file%
  8126. close_file(dbasehandle%)
  8127.  I%=1 
  8128.  fields%
  8129.     $Rf%(I%)=field$(I%)
  8130. redraw(mainW%)
  8131. get_form(
  8132.  Fptr%)
  8133.  F,L%,N%,I%,V%,x%,y%,xlim%,ylim%,text%
  8134.  design% 
  8135.  dval%=hand%:func%=1 
  8136.  dval%=-1:func%=0
  8137. ($database%+".Form")
  8138.  F>0 
  8139. #F,N%
  8140.  N%>127 
  8141.  fatal_err%,
  8142. msg("Err98")
  8143. 2  formlen%=&100:forminc%=formlen%:form_incs%=0
  8144. extend_named_sliding_block(formanchor%,formlen%)
  8145.     9  Fptr%=!formanchor%:Rf%(0)=Fptr%:$Rf%(0)="":Fptr%+=1
  8146.   Length%=0
  8147.  I%=1 
  8148. @    
  8149. #F,Desc$,Tag$(I%),xd%,yd%,xf%,yf%,len%,char%,fix%,bbox%
  8150. R    
  8151.  Desc$="" 
  8152.  dflg%=(winback%<<28)+&7016711 
  8153.  dflg%=(winback%<<28)+&7016731
  8154. /      
  8155.  bbox%=0 
  8156.  len%=0:width%=0:height%=0
  8157. 0      
  8158.  bbox%=0:width%=len%*16+16:height%=48
  8159. @      
  8160.  bbox%<&10000 
  8161.  bbox%>0:width%=bbox%*16+16:height%=48
  8162. 2      
  8163. :width%=bbox% 
  8164.  &FFFF:height%=bbox%>>16
  8165.         
  8166.  design% 
  8167.       
  8168.  char% 
  8169. 1        
  8170.  0,1,2,3,4,5,6,7,8,39,40:fval%=hand%
  8171. "        
  8172. :fval%=hvalid%(char%)
  8173.       
  8174.       
  8175.       
  8176. =        
  8177.  char%>8 
  8178.  char%<32:fval%=
  8179. val(keypadW%,char%-9)
  8180. !        
  8181. :fval%=valid%(char%)
  8182.       
  8183.         
  8184. "    x%=xf%+width%+32:y%=yf%-16
  8185.  x%>xlim% 
  8186.  xlim%=x%
  8187.  y%<ylim% 
  8188.  ylim%=y%
  8189. "'    y%=yd%-16:
  8190.  y%<ylim% 
  8191.  ylim%=y%
  8192.     Length%+=len%+1
  8193. $F    
  8194.  design%=
  8195.  char%=39 
  8196.  len%=(height% 
  8197.  40)*((width% 
  8198.  16)-4)
  8199. %7    len%(I%)=len%:chartype%(I%)=char%:fix%(I%)=fix%
  8200.     L%=
  8201. (Desc$)
  8202. '1    
  8203.  Fptr%-!formanchor%+L%+len%+2>formlen% 
  8204. (*      form_incs%+=1:formlen%+=forminc%
  8205. );      
  8206. extend_named_sliding_block(formanchor%,formlen%)
  8207. *        
  8208.     $Fptr%=Desc$
  8209. ,S    desc%(I%)=
  8210. create_icon(mainW%,xd%,yd%,L%*16+8,44,dflg%,"",Fptr%,dval%,L%+1)
  8211. --    Fptr%+=L%+1:Rf%(I%)=Fptr%:$Rf%(I%)=""
  8212. .0    
  8213. icon_design(char%,func%,width%,height%)
  8214. /H    
  8215.  char%=59 
  8216.  fval%=!logoanchor%:$Fptr%=Tag$(I%):len%=
  8217. (Tag$(I%))
  8218. 0\    field%(I%)=
  8219. create_icon(mainW%,xf%,yf%,width%,height%,iflags%,"",Fptr%,fval%,len%+1)
  8220.  char% 
  8221. 2j      
  8222.  9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31:buttonfield%(0,char%-9)=I%
  8223. 36      
  8224.  40:Rf%(I%)=
  8225. create_anchor("Picture"+
  8226. (I%))
  8227. 4?      
  8228.  3,6,46,47,54,56,57:
  8229. icon_bit(9,mainW%,field%(I%),
  8230. 5        
  8231.     Fptr%+=len%+1
  8232. close_file(F)
  8233. extend_named_sliding_block(formanchor%,Fptr%-!formanchor%):form_incs%+=1
  8234. setup_select(N%)
  8235.  N%=0
  8236. =7!block%=0:block%!4=ylim%:block%!8=xlim%:block%!12=0
  8237.  "Wimp_SetExtent",mainW%,block%
  8238. Tag$(0)="REC"
  8239. get_winpos
  8240.  F,x%,y%,w%,h%,xs%,ys%
  8241. getscreensize(ScreenWidth%,ScreenHeight%,Vpix%)
  8242. ($database%+".Winpos")
  8243.  present%<7 
  8244. G*  w%=ScreenWidth%*2:h%=ScreenHeight%*2
  8245.   x%=0:y%=0:xs%=0:ys%=0
  8246. I4  !block%=0:block%!4=-h%:block%!8=w%:block%!12=0
  8247.  "Wimp_SetExtent",mainW%,block%
  8248. position_window(mainW%,x%,y%,w%,h%,xs%,ys%)
  8249.  F>0 
  8250. #F,x%,y%,w%,h%,xs%,ys%
  8251. O4    
  8252. position_window(mainW%,x%,y%,w%,h%,xs%,ys%)
  8253. open_window(mainW%)
  8254. selected(passW%,9) 
  8255.  F>0 
  8256. T!      
  8257. #F,x%,y%,w%,h%,xs%,ys%
  8258. U8      
  8259. position_window(keypadW%,x%,y%,w%,h%,xs%,ys%)
  8260. V5      
  8261. position_window(keypadW%,100,50,0,0,0,0)
  8262. W        
  8263. close_file(F)
  8264. save_winpos
  8265.  F,x%,y%,w%,h%,xs%,ys%
  8266. ($database%+".Winpos")
  8267. `3!block%=mainW%:
  8268.  "Wimp_GetWindowState",,block%
  8269. aWx%=block%!4:y%=block%!8:w%=block%!12-x%:h%=block%!16-y%:xs%=block%!20:ys%=block%!24
  8270. #F,x%,y%,w%,h%,xs%,ys%
  8271. c5!block%=keypadW%:
  8272.  "Wimp_GetWindowState",,block%
  8273. dWx%=block%!4:y%=block%!8:w%=block%!12-x%:h%=block%!16-y%:xs%=block%!20:ys%=block%!24
  8274. #F,x%,y%,w%,h%,xs%,ys%
  8275. close_file(F)
  8276. position_window(wi%,x%,y%,w%,h%,xs%,ys%)
  8277. getscreensize(ScreenWidth%,ScreenHeight%,Vpix%)
  8278. k0!block%=wi%:
  8279.  "Wimp_GetWindowState",,block%
  8280.  w%=0 
  8281.  w%=block%!12-block%!4
  8282.  h%=0 
  8283.  h%=block%!16-block%!8
  8284.  0:x%=(ScreenWidth%-w%) 
  8285.  -1:x%=block%!4
  8286.  0: y%=(ScreenHeight%-h%) 
  8287.  -1:y%=block%!8
  8288. block%!4=x%:block%!12=x%+w%
  8289. block%!8=y%:block%!16=y%+h%
  8290. block%!20=xs%:block%!24=ys%
  8291. block%!28=-1
  8292. open_it(wi%)
  8293. open_at(
  8294.  flag%,wi%,butt%,ww%,wh%,iw%,ih%)
  8295.  x%,y%,vxmin%,vymax%,scrollx%,scrolly%
  8296.  flag% 
  8297. 5  !block%=mainW%:
  8298.  "Wimp_GetWindowState",,block%
  8299. L  vxmin%=block%!4:vymax%=block%!16:scrollx%=block%!20:scrolly%=block%!24
  8300. Z  !block%=mainW%:block%!4=field%(buttonfield%(0,butt%)):
  8301.  "Wimp_GetIconState",,block%
  8302. ?  x%=block%!16-scrollx%+vxmin%:y%=block%!20-scrolly%+vymax%
  8303. 2  !block%=wi%:
  8304.  "Wimp_GetWindowState",,block%
  8305. 6  block%!4=x%-(ww%+iw%) 
  8306.  2:block%!12=block%!4+ww%
  8307. 6  block%!8=y%-(wh%+ih%) 
  8308.  2:block%!16=block%!8+wh%
  8309.    block%!28=-1:
  8310. open_it(wi%)
  8311.   flag%=
  8312. open_window(wi%)
  8313. setup_select(fields%)
  8314.  S$,I%,J%,Fptr%,rows%
  8315. &selectlen%=&200:selinc%=selectlen%
  8316. create_named_sliding_block(selanchor%,selectlen%)
  8317. Fptr%=!selanchor%
  8318.  I%=1 
  8319.  fields%
  8320.  Fptr%-!selanchor%+144>selectlen% 
  8321.     selectlen%+=selinc%
  8322. :    
  8323. extend_named_sliding_block(selanchor%,selectlen%)
  8324.  chartype%(I%) 
  8325.  3,6,8,46,47,54,56,57:
  8326. #    rows%+=1:
  8327. lit(menu%(6),5,
  8328. V    handle%=
  8329. create_icon(pselectW%,8,-rows%*48-56,144,48,&17000531,"",Fptr%,-1,15)
  8330. 9    S$=$
  8331. text(mainW%,desc%(I%)):
  8332. (S$)>8 
  8333. S$,8)
  8334. $    $Fptr%=S$:Fptr%+=
  8335. ($Fptr%)+1
  8336. W    handle%=
  8337. create_icon(pselectW%,160,-rows%*48-56,80,48,&17000531,"",Fptr%,-1,15)
  8338. *    $Fptr%=Tag$(I%):Fptr%+=
  8339. ($Fptr%)+1
  8340.  J%=0 
  8341. a      handle%=
  8342. create_icon(pselectW%,240+J%*88,-rows%*48-52,44,44,&0740B13B,"",Fptr%,tick%,1)
  8343.       $Fptr%="":Fptr%+=1
  8344.     calcrow%?I%=rows%
  8345. :calcrow%?I%=0
  8346. #!block%=0:block%!4=-rows%*48-56
  8347. block%!8=740:block%!12=0
  8348.  "Wimp_SetExtent",pselectW%,block%
  8349. enable_row(R%,on%)
  8350.  R%>0 
  8351.  I%=R%*8+2 
  8352.  R%*8+7
  8353. &    
  8354. icon_bit(22,pselectW%,I%,on%)
  8355. )    
  8356.  on% 
  8357. deselect(pselectW%,I%)
  8358. save_form(f$)
  8359.  F,I%,xd%,yd%,xf%,yf%,w%,h%,bbox%,type%
  8360.  fields%=0 
  8361. Length%=0
  8362. !block%=mainW%
  8363. #F,fields%
  8364.  I%=1 
  8365.  fields%
  8366. (  dicon%=desc%(I%):ficon%=field%(I%)
  8367. 4  block%!4=dicon%:
  8368.  "Wimp_GetIconState",,block%
  8369.    xd%=block%!8:yd%=block%!12
  8370.   Desc$=$(block%!28)
  8371. 4  block%!4=ficon%:
  8372.  "Wimp_GetIconState",,block%
  8373.    xf%=block%!8:yf%=block%!12
  8374. 2  w%=block%!16-block%!8:h%=block%!20-block%!12
  8375.   bbox%=(h%<<16)+w%
  8376. #F,Desc$,Tag$(I%),xd%,yd%,xf%,yf%,len%(I%),chartype%(I%),fix%(I%),bbox%
  8377.   Length%+=len%(I%)+1
  8378. A  field$(I%)="":
  8379.  Rf%(I%)>0 
  8380.  chartype%(I%)<>40 
  8381.  $Rf%(I%)=""
  8382. close_file(F)
  8383.  "OS_File",18,f$,&7f2
  8384. lit(menu%(0),3,
  8385. make_empty_index(RA%,key%,Z%)
  8386.  I%,K%,P%,KLM%,S$
  8387.  "Hourglass_On"
  8388. KL%(key%),".")
  8389. KLM%=KL%(key%)+13
  8390. P%=LH%+48+(RA%+1)*KLM%
  8391. create_named_sliding_block(keyanchor%(key%),P%)
  8392. keybase%=!keyanchor%(key%)
  8393. keybase%!0=138
  8394. keybase%!4=
  8395. ($Increment%)
  8396. $date%=
  8397. (1)):
  8398. date(key%)
  8399. keybase%!62=0:keybase%!66=0
  8400. keybase%?70=KL%(key%)
  8401. Ckeybase%?71=
  8402. selected(keyW%,30):case%(key%)=
  8403. selected(keyW%,30)
  8404. Gkeybase%?72=
  8405. selected(keyW%,35):incspace%(key%)=
  8406. selected(keyW%,35)
  8407. Ckeybase%?73=
  8408. selected(keyW%,37):null%(key%)=
  8409. selected(keyW%,37)
  8410.  I%=0 
  8411. (  !(keybase%+74+(I%*4))=KW%(key%,I%)
  8412.  I%=0 
  8413.   P%=I%*8+LH%
  8414.   !(keybase%+P%)=-P%
  8415.   !(keybase%+P%+4)=P%
  8416. P%=!keybase%
  8417.  I%=0 
  8418.  RA%-1
  8419.  "Hourglass_Percentage",(I%*100) 
  8420.   !(keybase%+P%)=P%+KLM%
  8421.   !(keybase%+P%+4)=0
  8422.   $(keybase%+P%+8)=S$
  8423. #  !(keybase%+P%+KL%(key%)+9)=I%
  8424.   P%+=KLM%
  8425. !(keybase%+P%)=0
  8426. !(keybase%+P%+4)=0
  8427. $(keybase%+P%+8)=S$
  8428.  !(keybase%+P%+KL%(key%)+9)=0
  8429.  "Hourglass_Off"
  8430. save_recs(f$,RA%)
  8431.  dbasehandle%,I%,J%,rec$
  8432. rec$=
  8433. fields%-1,
  8434. (10))
  8435.  "Hourglass_On"
  8436. dbasehandle%=
  8437.  I%=0 
  8438. #dbasehandle%=I%*Length%
  8439. #dbasehandle%,rec$
  8440.  "Hourglass_Percentage",(I%*100) 
  8441. #dbasehandle%=(RA%+1)*Length%
  8442. close_file(dbasehandle%)
  8443.  "OS_File",18,f$,&7f2
  8444.  "Hourglass_Off"
  8445. move_records(key%,file%,top)
  8446.  REC%,target$,action$,dest%,ex%,ptr%
  8447. target$=$Query%
  8448. Search$=
  8449. parse
  8450.  "Wimp_WhichIcon",moveW%,block%,&003F0000,&00210000
  8451. movetype%=!block%-1
  8452.  movetype%<>2 
  8453.  target$="" 
  8454.  target$=" all records from subfile "+
  8455. (file%) 
  8456.  target$=" from subfile "+
  8457. (file%)+" when "+target$
  8458.  movetype% 
  8459.  -1:action$="Move 
  8460. "+target$
  8461.  0:action$="Delete"+target$
  8462.  1:action$="Move 
  8463. "+target$
  8464.  2:dest%=
  8465. text(moveW%,6))
  8466.  target$="" 
  8467.  action$="Accumulate all records in subfile "+
  8468. (dest%) 
  8469.  action$="Accumulate records in subfile "+
  8470. (dest%)+" when "+target$
  8471. confirm(action$) 
  8472.  "Hourglass_On"
  8473. *dbasehandle%=
  8474. ($database%+".Database")
  8475. earmark(movetype%=2,file%,top)
  8476. close_file(dbasehandle%)
  8477. ptr%=!tempanchor%
  8478.  REC%=0 
  8479.  RA%-1
  8480. 6  ex%+=1:
  8481.  "Hourglass_Percentage",(ex%*100) 
  8482.  movetype% 
  8483.     file%=ptr%?REC%
  8484. "%    
  8485.  dest%<>file% 
  8486.  file%<>255 
  8487. #*      
  8488. read(fields%,
  8489. ,REC%,$database%)
  8490.       
  8491.  key%=0 
  8492.  Keys%
  8493.         top=8*file%+LH%
  8494.         N$=key$(key%)
  8495. '>        
  8496. delete(N$,key%):date%?file%=1:$Date%(file%)=
  8497.         top=8*dest%+LH%
  8498. )>        
  8499. insert(N$,key%):date%?dest%=1:$Date%(dest%)=
  8500.       
  8501.  key%
  8502. +        
  8503.  ptr%?REC%<>255 
  8504. .*      
  8505. read(fields%,
  8506. ,REC%,$database%)
  8507. /'      addr=
  8508. shift(movetype%,key%,0)
  8509. 0        
  8510.  REC%
  8511. scrap_sliding_block(tempanchor%)
  8512.  "Hourglass_Off"
  8513. export_subset(f$)
  8514.  I%,F,R%,recs%,ptr%,count%,subtotal%,blobs%,ex%,Z%,len%,source$,dest$,O$,REC%
  8515.  "OS_CLI","Copy "+$database%+".Form "+f$+".Form ~C~V"
  8516.  link$(0)="LOADED" 
  8517.  "OS_CLI","Copy "+$database%+".Link "+f$+".Link ~C~V"
  8518.  calc$(0)="LOADED" 
  8519.  "OS_CLI","Copy "+$database%+".Calc "+f$+".Calc ~C~V"
  8520.  "OS_CLI","Copy "+$database%+".ValTables "+f$+".Valtables ~C~VR"
  8521.  "OS_CLI","Copy "+$database%+".Colours "+f$+".Colours ~CF~V"
  8522.  "OS_File",5,$database%+".UserFuncs" 
  8523.  d%=1 
  8524.  "OS_CLI","Copy "+$database%+".UserFuncs "+f$+".UserFuncs ~CF~V"
  8525.  "OS_File",5,$database%+".UsrSprites" 
  8526.  d%=1 
  8527.  "OS_CLI","Copy "+$database%+".UsrSprites "+f$+".UsrSprites ~CF~V"
  8528.  "OS_CLI","Copy "+$database%+".!Run "+f$+".!Run ~CF~V"
  8529.  "Hourglass_On"
  8530. D"blobs%=
  8531. find_blobs($database%)
  8532. Search$=
  8533. parse
  8534. F*dbasehandle%=
  8535. ($database%+".Database")
  8536. earmark(
  8537. ,file%,top)
  8538. (f$+".Database")
  8539. ptr%=!tempanchor%
  8540. J%subtotal%=
  8541. count_recs(key%,zero%)
  8542.  I%=0 
  8543.  RA%-1
  8544.  ptr%?I%<>255 
  8545.     ex%=-1
  8546.  ex%<blobs%
  8547.       ex%+=1:F%=Ext%(ex%)
  8548. P@      
  8549. copy_blob($database%,f$,I%,recs%,F%,F%,chartype%(F%))
  8550. Q        
  8551. R<    
  8552. readsmarray(dbasehandle%,I%):
  8553. writesmarray(F,recs%)
  8554.     count%+=1
  8555. T:    
  8556.  "Hourglass_Percentage",(count%*100) 
  8557.  subtotal%
  8558. scrap_sliding_block(tempanchor%)
  8559. X=F$()="":
  8560. writesmarray(F,recs%):
  8561. #F=Length%*recs%:recs%-=1
  8562.  K%=0 
  8563.  Keys%
  8564.   KL%(MaxKeys%+1)=KL%(K%)
  8565.  I%=0 
  8566. \%    KF%(MaxKeys%+1,I%)=KF%(K%,I%)
  8567. ]%    KW%(MaxKeys%+1,I%)=KW%(K%,I%)
  8568. make_empty_index(recs%,MaxKeys%+1,
  8569.  REC%=0 
  8570.  recs%-1
  8571. readsmarray(F,REC%)
  8572.     KEY$=
  8573. key2(K%,1)
  8574. c     
  8575. insert(KEY$,MaxKeys%+1)
  8576. d4    
  8577.  "Hourglass_Percentage",(REC%*100) 
  8578.  recs%
  8579.  REC%
  8580. f&  keybase%=!keyanchor%(MaxKeys%+1)
  8581.  "SlidingHeap_DescribeBlock",slidingheapbase%,keyanchor%(MaxKeys%+1) 
  8582.  ,,filelength%
  8583.  K%>0 
  8584.  index$="Indices." 
  8585.  index$=""
  8586.  "OS_File",10,f$+"."+index$+Index$(K%),&7f0,,keybase%,keybase%+filelength%
  8587. scrap_sliding_block(keyanchor%(MaxKeys%+1))
  8588. close_file(F)
  8589. close_file(dbasehandle%)
  8590.  "OS_File",18,f$+".Database",&7f2
  8591. export%=
  8592.  "Hourglass_Off"
  8593. close_it(savesubW%)
  8594. find_blobs(f$)
  8595.  N%,R4%,S$
  8596. v    N%=-1
  8597.  R4%<>-1
  8598.  "OS_GBPB",9,f$,block%,1,R4%,11 
  8599.  ,,S$,,R4%
  8600. S$,4) 
  8601. z)    
  8602.  "Memo":N%+=1:Ext%(N%)=
  8603. S$,5))
  8604. {)    
  8605.  "Draw":N%+=1:Ext%(N%)=
  8606. S$,5))
  8607. |)    
  8608.  "Spri":N%+=1:Ext%(N%)=
  8609. S$,7))
  8610. earmark(all%,file%,top)
  8611.  I%,P%
  8612.  tempanchor% 
  8613. scrap_sliding_block(tempanchor%)
  8614. create_named_sliding_block(tempanchor%,RA%)
  8615. ptr%=!tempanchor%
  8616.  I%=0 
  8617.  RA%-1
  8618.   ptr%?I%=255
  8619.  all% 
  8620.  file%=0 
  8621.     top=8*file%+LH%
  8622. !    P%=
  8623. neighbour(key%,top,1)
  8624. *    
  8625. scan_file("P%<>top",key%,file%,2)
  8626.  file%
  8627.   P%=
  8628. neighbour(key%,top,1)
  8629. scan_file("P%<>top",key%,file%,2)
  8630. rotate
  8631.  Access% 
  8632. confirm(
  8633. msg("Err49"))=
  8634.  keybase%
  8635.  I%,L%,Z%,Q%,R%,S%,key%
  8636.  key%=0 
  8637.  Keys%
  8638.    keybase%=!keyanchor%(key%)
  8639.   S%=LH%+40
  8640.   Z%=keybase%!S%
  8641.  I%=S%-8 
  8642.  S%-40 
  8643. )    L%=keybase%!I%:R%=keybase%!(I%+4)
  8644. =    
  8645.  L%>0 
  8646.  keybase%!(I%+8)=L% 
  8647.  keybase%!(I%+8)=-(I%+8)
  8648.  Z%>0 
  8649.  keybase%!(S%-40)=Z% 
  8650.  keybase%!(S%-40)=-(S%-40)
  8651.  I%=S%-40 
  8652.     Q%=I%-8
  8653.  Q%=S%-48 
  8654.  Q%=S%
  8655. !    PR%=
  8656. neighbour(key%,I%,0)
  8657. !    SU%=
  8658. neighbour(key%,I%,1)
  8659. '    
  8660.  PR%>S% 
  8661.  keybase%!(PR%+4)=-I%
  8662. #    
  8663.  SU%>S% 
  8664.  keybase%!SU%=-I%
  8665.  key%
  8666. $date%=
  8667. asterisk(
  8668. write_log(-1,"Subfiles rotated")
  8669. create_index(key%)
  8670.  indexing% 
  8671.  printing% 
  8672.  Keys%=MaxKeys% 
  8673. softerror(
  8674. (Keys%),95):
  8675.  file%,top,P%,KEY$,REC%,val$,zero%,abort%,replace%,J%,I%
  8676. newkey%=0:f$=""
  8677.  J%=0 
  8678.  keyfield%(J%)>0 
  8679.  f$+=Tag$(keyfield%(J%))+"+"
  8680.  I%=0 
  8681. C    
  8682.  keyfield%(J%)=KF%(0,I%) 
  8683.  keyfield%(J%)>0 
  8684.  KF%(0,I%)>0 
  8685. F      
  8686. confirm(
  8687. msg("Err100,"+Tag$(keyfield%(J%))))=
  8688.  abort%=
  8689.         
  8690.  abort% 
  8691. f$)="+" 
  8692. (f$)>10
  8693.   newkey%+=1
  8694.  Index$(newkey%)=f$ 
  8695.  newkey%>Keys%
  8696.  newkey%=key%:
  8697. softerror(f$,106):abort%=
  8698.  newkey%<=Keys%:
  8699. )    
  8700. confirm(
  8701. msg("Err50,"+f$))=
  8702. 3      
  8703. scrap_sliding_block(keyanchor%(newkey%))
  8704.       replace%=
  8705.       
  8706.  abort%=
  8707.         
  8708.  Keys%>MaxKeys%:Keys%-=1:
  8709. softerror(
  8710. (Keys%),95):abort%=
  8711. :Keys%=newkey%
  8712.  abort% 
  8713. copy_keydata(newkey%)
  8714. Index$(newkey%)=f$
  8715. -f$=$database%+".Indices."+Index$(newkey%)
  8716. make_empty_index(RA%,newkey%,
  8717. lit(menu%(0),2,
  8718. limit_actions(
  8719. abort_index(f$):
  8720. *dbasehandle%=
  8721. ($database%+".Database")
  8722. indexing%=
  8723. :Search$="TRUE"
  8724. update_stats
  8725.  file%=0 
  8726.   top=file%*8+LH%
  8727.   P%=
  8728. neighbour(key%,top,1)
  8729.   val$=
  8730. type(newkey%)
  8731.  "Hourglass_On"
  8732. scan_file("P%<>top",key%,file%,4)
  8733.  file%
  8734. end_index
  8735. colour(newkey%,2)
  8736. asterisk(
  8737. write_log(-1,"Index "+Index$(newkey%)+" created")
  8738. abort_index(f$)
  8739. end_index
  8740.  replace% 
  8741. open_index(f$,newkey%,
  8742.  index%=newkey% 
  8743.  Keys%
  8744. )    Index$(newkey%)=Index$(newkey%+1)
  8745.  index%
  8746. scrap_sliding_block(keyanchor%(newkey%))
  8747.   Keys%-=1
  8748.   newkey%=0
  8749. softerror("",43)
  8750. wimp_error(
  8751. end_index
  8752.  "Hourglass_Smash"
  8753. indexing%=
  8754. limit_actions(Access%)
  8755.  "Wimp_CreateMenu",,-1
  8756. lit(menu%(0),2,Modify%)
  8757. close_file(dbasehandle%)
  8758. shift(t%,k%,m%)
  8759.  a%,key%,fi%,I%,F$,action$,finished%
  8760.  Access% 
  8761. =addr
  8762.  REC%=RA% 
  8763. =addr
  8764.  t%=0 
  8765.  m%=1 
  8766. confirm(
  8767. msg("Err51"))=
  8768. =addr
  8769.  key%=0 
  8770.  Keys%
  8771.   N$=key$(key%)
  8772. delete(N$,key%)
  8773.  N$="*Failed*" 
  8774. =addr
  8775.  key%=k% 
  8776. next_match(addr,1,Filter$,finished%)
  8777.  t%=1 
  8778.  fi%=(file%+1) 
  8779.  t%=-1 
  8780.  fi%=(file%-1-6*(file%=0))
  8781.   top=8*fi%+LH%
  8782.  I%=1 
  8783.  fields%
  8784.       V%=chartype%(I%)
  8785.       
  8786.         
  8787.  36,39:
  8788. R        
  8789. blob_path(
  8790. ,$database%,REC%,I%,V%,F$)>=0 
  8791.  "OS_CLI","Delete "+F$
  8792.         
  8793.  9,37:
  8794. R        
  8795. blob_path(
  8796. ,$database%,REC%,I%,V%,F$)>=0 
  8797.  "OS_CLI","Delete "+F$
  8798.         
  8799. R        
  8800. blob_path(
  8801. ,$database%,REC%,I%,V%,F$)>=0 
  8802.  "OS_CLI","Delete "+F$
  8803.       
  8804.  6    
  8805. insert(N$,key%):date%?fi%=1:$Date%(fi%)=
  8806.   top=8*file%+LH%
  8807.   date%?file%=1
  8808.   $Date%(file%)=
  8809.  key%
  8810. selected(prefsW%,15) 
  8811. )'    
  8812. read(fields%,
  8813. ,RA%,$database%)
  8814. *$    
  8815. write_dbase(REC%,fields%,
  8816. +&    action$=" Deleted and blanked"
  8817.  action$=" Deleted"
  8818. :action$=" ===> subfile "+
  8819. (fi%)
  8820. asterisk(
  8821. write_log(REC%,logentry$+action$)
  8822. type(key%)
  8823.  F%,V$
  8824.  key%>=0 
  8825.  F%=KF%(key%,0) 
  8826.  F%=-key%
  8827.  chartype%(F%) 
  8828.  3,6,46,47,54,56,57:V$="VAL"
  8829. confirm(string$)
  8830. !block%=255
  8831. $(block%+4)=string$
  8832.  "Wimp_ReportError",block%,19,"Powerbase - please confirm:" 
  8833.  ,result%
  8834. =result%=1
  8835. getscreensize(
  8836.  S_Width%,
  8837.  S_Height%,
  8838.  Vpix%)
  8839.  H1%,V1%,H2%,V2%,End%
  8840. D$H1%=0:V1%=4:H2%=8:V2%=12:End%=16
  8841. E9Mi%!H1%=4:Mi%!V1%=5:Mi%!H2%=11:Mi%!V2%=12:Mi%!End%=-1
  8842.  "OS_ReadVduVariables",Mi%,Mo%
  8843. G)S_Width%=(1<<(Mo%!H1%))*((Mo%!H2%)+1)
  8844. H*S_Height%=(1<<(Mo%!V1%))*((Mo%!V2%)+1)
  8845. Vpix%=Mo%!V2%+1
  8846. match(X%,Y%)
  8847. check_change
  8848. $Query%=""
  8849. redraw_icon(queryW%,0)
  8850. position_window(matchW%,X%,Y%,0,0,0,0)
  8851. set_caret(queryW%,0)
  8852. text(helpW%,0)=Tag$(Match_tag%)
  8853. tick_one(fieldmenu%,0,fields%-1,Match_tag%-1)
  8854. redraw_icon(helpW%,0)
  8855. text(matchW%,1)="":
  8856. redraw_icon(matchW%,1)
  8857. selected(matchW%,4) 
  8858. text(matchW%,3)="Found:" 
  8859. text(matchW%,3)="Time:"
  8860. redraw_icon(matchW%,3)
  8861. matching%=
  8862.  List printing -----------------------------------------------------
  8863. print_this
  8864. ^%f$=$database%+".PrintRes.Default"
  8865.  "OS_File",5,f$ 
  8866.  d%,,type%
  8867.  d%=1 
  8868.  type%=&7f3 
  8869. load_selection(f$)
  8870. a!old%=
  8871. selected_esg(printW%,3)
  8872. deselect(printW%,old%)
  8873. select(printW%,24)
  8874. mouse(0,0,4,matchW%,2)
  8875. clear_selection
  8876. deselect(printW%,24)
  8877. select(printW%,old%)
  8878. do_it(Search$,displayed%)
  8879.  printing% 
  8880.  zero%,P%,rec%,REC%,copy%
  8881. lit(menu%(18),1,
  8882. Form$=printorder$
  8883.  Form$="" 
  8884.  W%=0 
  8885.  KF%(0,W%)>0 
  8886. s:      F$=
  8887. ~(KF%(0,W%)):
  8888. (F$)=1 
  8889.  F$="0"+F$:Form$+=F$
  8890.       
  8891. selected(matchW%,4) 
  8892. select(mainW%,field%(KF%(0,W%))):printorder$+=F$:
  8893. lit(menu%(6),6,
  8894. lit(menu%(6),7,
  8895. lit(menu%(1),7,
  8896. u        
  8897. x#Heading$="":Hlongest%=0:Sum()=0
  8898.  I%=1 
  8899.   Sum(I%,5)=10^30
  8900. |+Count%=0:examined%=0:printed%=0:sums%=0
  8901. read_print_options
  8902. selected(printW%,40) 
  8903. find_max_lengths(displayed%) 
  8904.  maxlen%()=len%()
  8905. LenLine%=
  8906. include_fields
  8907. ,numfirst%=
  8908. margin_warn:
  8909.  numfirst%<0 
  8910. list_head(0)
  8911.  "Wimp_GetPointerInfo",,block%
  8912. limit_actions(
  8913. lit(menu%(0),2,0)
  8914. printing%=
  8915.  "OS_ReadMonotonicTime" 
  8916.  stime%
  8917. abort_printing:
  8918. *dbasehandle%=
  8919. ($database%+".Database")
  8920.  "Hourglass_On"
  8921.  displayed%>=0:
  8922. readsmarray(dbasehandle%,displayed%)
  8923.  format$="label" 
  8924.  copy%=1 
  8925.  labcopies%
  8926. (      
  8927. print_record(displayed%,addr)
  8928.  copy%
  8929. (    
  8930. print_record(displayed%,addr)
  8931.  usekey%=-1:
  8932. B  P%=
  8933. neighbour(key%,top,1):
  8934. scan_file("P%<>top",key%,file%,1)
  8935.   kl%=
  8936. (useval$)
  8937. #  P%=
  8938. search(useval$,usekey%,1)
  8939.  P%>=0 
  8940.  k$=useval$:
  8941. scan_file("P%<>top AND LEFT$(k$,kl%)=useval$",usekey%,file%,1)
  8942. end_printing
  8943. abort_printing
  8944. end_printing
  8945. softerror("",29)
  8946. wimp_error(
  8947. end_printing
  8948.  time%
  8949.  format$="label" 
  8950.  thislab%>0 
  8951. print_labels
  8952.  "OS_ReadMonotonicTime" 
  8953.  etime%
  8954. time%=etime%-stime%
  8955. selected(matchW%,4) 
  8956. text(matchW%,1)=
  8957. (printed%) 
  8958. text(matchW%,1)=
  8959. (time% 
  8960.  100)+"."+
  8961. (time% 
  8962.  100)+" sec"
  8963. redraw_icon(matchW%,1)
  8964.  "Hourglass_Smash"
  8965.  format$<>"label" 
  8966.  displayed%=-1 
  8967. total_list:
  8968. page_number
  8969.  reportdest$ 
  8970.  "Window":
  8971. selected(matchW%,4) 
  8972. screen_list
  8973. extend_named_sliding_block(textanchor%,Count%*LenLine%)
  8974.  "File":
  8975. close_file(texthandle%):
  8976.  "OS_File",18,f$,&fff
  8977. close_window(saveW%)
  8978.  "Printer":
  8979. B  Start%=!textanchor%:End%=Start%+Count%*LenLine%+1:Type%=&fff
  8980. )  $Start%=pitch$:?(End%-1)=0:?End%=12
  8981. ;  block%!0=256:block%!12=0:block%!16=&80142:block%!20=0
  8982. D  block%!24=0:block%!28=0:block%!32=0:block%!36=0:block%!40=&fff
  8983.   $(block%+44)="List"
  8984.  "Wimp_SendMessage",18,block%,0
  8985. printing%=
  8986. :savetofile%=
  8987. lit(menu%(0),2,Modify%)
  8988. limit_actions(Access%)
  8989. close_file(dbasehandle%)
  8990. write_log(-1,"List printed: "+query$)
  8991. find_max_lengths(displayed%)
  8992.  P%,k$
  8993. end_find_max:
  8994. maxlen%()=0
  8995. *dbasehandle%=
  8996. ($database%+".Database")
  8997.  "Hourglass_On"
  8998.  "Hourglass_LEDs",%11
  8999.  displayed%>=0:
  9000. readsmarray(dbasehandle%,displayed%)
  9001. get_lengths
  9002.   usekey%=-1:
  9003. B  P%=
  9004. neighbour(key%,top,1):
  9005. scan_file("P%<>top",key%,file%,0)
  9006.   kl%=
  9007. (useval$)
  9008. #  P%=
  9009. search(useval$,usekey%,1)
  9010.  P%>=0 
  9011.  k$=useval$:
  9012. scan_file("P%<>top AND LEFT$(k$,kl%)=useval$",usekey%,file%,0)
  9013.  "Hourglass_LEDs",%00
  9014.  "Hourglass_Off"
  9015. close_file(dbasehandle%)
  9016. get_lengths
  9017.  I%,L%,F%,l%,Len%,F$,SF$
  9018. I%=-1:L%=
  9019. (Form$)-1
  9020.  I%<L%
  9021. "  I%+=2:F%=
  9022. fnum(
  9023. Form$,I%,2))
  9024. selected(printW%,11) 
  9025. /      F$=
  9026. expand(F$(F%),link$(F%),Len%,SF$)
  9027.       
  9028.  F$=F$(F%)
  9029.   l%=
  9030.  l%>maxlen%(F%) 
  9031.  maxlen%(F%)=l%
  9032. end_find_max
  9033.  "Hourglass_Smash"
  9034. close_file(dbasehandle%)
  9035. maxlen%()=len%()
  9036. softerror("",70)
  9037. wimp_error(
  9038. print_record(REC%,address%)
  9039.  I%,F%,N%,Z%,F$,SF$,Tab%,n$,y$,base%,pos%
  9040.  format$<>"label" 
  9041.  printed%+=1
  9042. selected(matchW%,4) 
  9043. -thisrow%=-1:base%=!lineanchor%:pos%=base%
  9044. heap_store(lineanchor%,LenLine%,0,pos%,0,margin$)
  9045.  I%=1 
  9046. (Form$)-1 
  9047.   F%=
  9048. fnum(
  9049. Form$,I%,2))
  9050.  format$="label" 
  9051.  newline%=
  9052.  newline%
  9053.   N%+=1
  9054. *    
  9055.  0:F$=
  9056. (REC%):F$=
  9057. (F$)," ")+F$
  9058. 3    
  9059.  MaxFields%+1:Z%=
  9060. rec_no(F$,key%,address%)
  9061. !    
  9062. selected(printW%,11) 
  9063. /      F$=
  9064. expand(F$(F%),link$(F%),Len%,SF$)
  9065.       
  9066. #      F$=F$(F%):Len%=len%(F%)+2
  9067.         
  9068.  chartype%(F%) 
  9069.       
  9070.  41,42,43,44,45:
  9071.       Z%=
  9072. no_yes(F%,n$,y$)
  9073. "      
  9074.  F$=" " 
  9075.  F$=y$ 
  9076.  F$=n$
  9077. !      
  9078.  3,6,8,46,47,54,56,57:
  9079. -      
  9080. sums(F$,calcrow%?F%,chartype%(F%))
  9081.       
  9082.  format$="vert" 
  9083. &        F$=
  9084. len%(F%)-
  9085. (F$)," ")+F$
  9086. %        
  9087. justify(F$,N%,N%-1)
  9088.       
  9089.         
  9090. selected(printW%,12) 
  9091. u(F$)
  9092.  chartype%(F%) 
  9093.  37:F$="<Sprite>"
  9094.  38:F$="<Drawfile>"
  9095.  format$ 
  9096.  "horiz","table":
  9097. >    
  9098. heap_store(lineanchor%,LenLine%,0,pos%,0,
  9099. tab(F$,N%))
  9100.  "vert":
  9101. R    
  9102. selected(printW%,2) 
  9103.  Head$=$
  9104. text(mainW%,(desc%(F%))) 
  9105.  Head$=Tag$(F%)
  9106. 8    Head$=margin$+
  9107. Tab%(1)-
  9108. (Head$)," ")+Head$+" : "
  9109. @    hdlen%=
  9110. (Head$):H$=
  9111. hdlen%," "):datlen%=
  9112. (F$):pos%=base%
  9113.  chartype%(F%) 
  9114. !/      
  9115.  36,39:
  9116. print_memo(REC%,F%,Head$,F$)
  9117.       
  9118. #:      
  9119. heap_store(lineanchor%,LenLine%,0,pos%,0,Head$)
  9120. $%      
  9121.  hdlen%+datlen%<LenLine% 
  9122. %9        
  9123. heap_store(lineanchor%,LenLine%,0,pos%,0,F$)
  9124. &:        
  9125. list_line(REC%,lineanchor%,hdlen%+datlen%,32)
  9126.         
  9127. (A        L%=LenLine%-hdlen%-1:F$+=" ":H$=
  9128. hdlen%," "):first%=
  9129.         
  9130. (F$)>L%
  9131.           p%=1:q%=1
  9132.           
  9133.             p%=
  9134. F$," ",q%)
  9135. -"            
  9136.  p%<=L% 
  9137.  q%=p%+1
  9138.           
  9139.  p%>L%
  9140. /%          s$=
  9141. F$,q%-2):F$=
  9142. F$,q%)
  9143. 0#          
  9144.  first% 
  9145.  s$=H$+s$
  9146. 1;          
  9147. heap_store(lineanchor%,LenLine%,0,pos%,0,s$)
  9148. 2:          
  9149. list_line(REC%,lineanchor%,hdlen%+
  9150. (s$),32)
  9151. 3!          pos%=base%:first%=
  9152.         
  9153.         pos%=base%:
  9154. 6<        
  9155. heap_store(lineanchor%,LenLine%,0,pos%,0,H$+F$)
  9156. 78        
  9157. list_line(REC%,lineanchor%,hdlen%+
  9158. (F$),32)
  9159.       
  9160. 9        
  9161. :#    
  9162. extra_lines(linefeed%-1,0)
  9163.  "label":
  9164.  newline% 
  9165. =n      
  9166.  (F$<>"" 
  9167. selected(labelW%,16)=
  9168.  thisrow%<=labrepl% 
  9169.  thisrow%+=1:Label$(thisrow%,thislab%)=F$
  9170.       
  9171. ?/      Label$(thisrow%,thislab%)+=spacer$+F$
  9172. @        
  9173.  format$ 
  9174.  "horiz":
  9175. list_line(REC%,lineanchor%,pos%-base%,32)
  9176. extra_lines(linefeed%-1,0)
  9177.  "vert":
  9178. rule_off(45)
  9179.  "table":
  9180.   colpos%=pos%-base%
  9181. heap_store(lineanchor%,LenLine%,0,pos%,0,column$)
  9182. list_line(REC%,lineanchor%,pos%-base%,32)
  9183. extra_lines(linefeed%-1,colpos%)
  9184.  "label":
  9185. O,  Label$(labrepl%+1,thislab%)=
  9186. key2(0,1)
  9187. P3  thislab%+=1:
  9188.  thislab%>labup% 
  9189. print_labels
  9190.  format$<>"label" 
  9191.  (printed% 
  9192.  LinesPerPage%)=0 
  9193. selected(printW%,10)=
  9194.  displayed%=-1 
  9195. page_number
  9196. UN    $(!lineanchor%)=margin$+
  9197. (12):
  9198. list_line(-1,lineanchor%,Lmargin%+1,32)
  9199. VW    
  9200. list_head(1):
  9201. lit(menu%(18),1,
  9202. selected(printW%,10) 
  9203. selected(printW%,47))
  9204. page_number
  9205.  page%>0 
  9206. rule_off(32)
  9207. ^$  line$=margin$+"Page "+
  9208. (page%)
  9209. _B  $(!lineanchor%)=line$:
  9210. list_line(-1,lineanchor%,
  9211. (line$),32)
  9212.   page%+=1
  9213. extra_lines(ex%,tab%)
  9214.  base%,pos%
  9215.  ex%>0
  9216.  tab% 
  9217. rule_off(32)
  9218. j%    base%=!lineanchor%:pos%=base%
  9219.  I%=0 
  9220.  tab%-1
  9221.       pos%?I%=32
  9222.     pos%+=tab%
  9223. o:    
  9224. heap_store(lineanchor%,LenLine%,0,pos%,0,column$)
  9225. p2    
  9226. list_line(REC%,lineanchor%,pos%-base%,32)
  9227.   ex%-=1
  9228. print_memo(R%,F%,margin$,F$)
  9229.  text%,B%,F$,sp%,L%,rem$,base%,pos%,Line$,first%
  9230. blob_path(
  9231. ,$database%,R%,F%,36,F$)>=0 
  9232. y!  base%=!lineanchor%:first%=
  9233.   text%=
  9234. #text%
  9235. |&    Line$=margin$+rem$:L%=
  9236. (Line$)
  9237. }        
  9238.       B%=
  9239. #text%
  9240.       Line$+=
  9241. (B%):L%+=1
  9242.       
  9243.  B%=32 
  9244.  sp%=L%
  9245. )    
  9246.  B%=10 
  9247.  L%=LenLine%-3 
  9248. #text%
  9249. '      
  9250.  B%=10:rem$="":Line$=
  9251. Line$)
  9252.       
  9253. #text%:rem$=""
  9254. 2      
  9255. :rem$=
  9256. Line$,sp%+1):Line$=
  9257. Line$,sp%-1)
  9258.         
  9259.     pos%=base%
  9260. 8    
  9261. heap_store(lineanchor%,LenLine%,0,pos%,0,Line$)
  9262. 0    
  9263. list_line(REC%,lineanchor%,
  9264. (Line$),32)
  9265. 4    
  9266.  first% 
  9267.  margin$=
  9268. (margin$)," "):first%=
  9269. close_file(text%)
  9270. inmemo(F%,s$)
  9271.  len%,found%,line$,base%,ptr%,case%
  9272. *len%=
  9273. load_blob($database%,REC%,F%,36)
  9274.  len%>0 
  9275.    case%=
  9276. selected(queryW%,1)
  9277.    base%=!tempanchor%:ptr%=-1
  9278.     line$=""
  9279.         
  9280. &      ptr%+=1:line$+=
  9281. (base%?ptr%)
  9282. "    
  9283. (line$)>250 
  9284.  ptr%=len%
  9285. #    
  9286.  case% 
  9287.  line$=
  9288. u(line$)
  9289. !    
  9290. line$,s$)>0 
  9291.  found%=
  9292.  ptr%=len%
  9293. =found%
  9294. wc(f$,t$)
  9295.  failed%,P%,Q%,F%,end%,c$,x$
  9296.  P%+=1
  9297.   c$=
  9298. t$,P%,1)
  9299. (    
  9300.  "":end%=(Q%=F%):failed%=
  9301.  end%
  9302.  $wc%:
  9303.  P%+=1:Q%+=1
  9304.       c$=
  9305. t$,P%,1)
  9306.  c$<>$wc%
  9307.     P%-=1
  9308.  $ws%:
  9309.     R%=P%+1
  9310.  P%+=1
  9311.       c$=
  9312. t$,P%,1)
  9313. #    
  9314.  c$=$ws% 
  9315.  c$=$wc% 
  9316.  c$=""
  9317.       
  9318.  "":end%=
  9319. -      s$=
  9320. t$,R%):failed%=(
  9321. (s$))<>s$)
  9322.       
  9323.  $wc%,$ws%:
  9324. 7      s$=
  9325. t$,R%,P%-R%):Q%=
  9326. f$,s$,Q%):failed%=(Q%=0)
  9327. 9      Q%+=
  9328. (s$)-1:P%-=1:
  9329.  failed% 
  9330.  failed%=(Q%=F%)
  9331.         
  9332.     Q%+=1:x$=
  9333. f$,Q%,1)
  9334.     failed%=(c$<>x$)
  9335.  end% 
  9336.  failed%
  9337.  failed%
  9338. print_labels
  9339.  I%,Line$,S$,linesprinted%,pos%
  9340. fixed_line($
  9341. text(labelW%,24))
  9342.  I%=0 
  9343.  labrepl%-1
  9344.   Line$=margin$
  9345.  K%=0 
  9346.  thislab%-1
  9347.     S$=Label$(I%,K%)
  9348. !    
  9349. selected(labelW%,11) 
  9350. 9      
  9351.  I%=labsubst% 
  9352.  S$="" 
  9353.  S$=Label$(labrepl%,K%)
  9354.         
  9355. 9    
  9356.  K%=thislab%-1 
  9357.  W%=longestfield% 
  9358.  W%=labwidth%
  9359. (S$)>W% 
  9360. S$,W%)
  9361.      Line$+=S$+
  9362. (S$)," ")
  9363.   pos%=!lineanchor%
  9364. heap_store(lineanchor%,LenLine%,0,pos%,0,Line$)
  9365. list_line(REC%,lineanchor%,
  9366. (Line$),32)
  9367.   linesprinted%+=1
  9368. fixed_line($
  9369. text(labelW%,25))
  9370. selected(labelW%,13) 
  9371. rule_off(32)
  9372.   Line$=margin$
  9373.  K%=0 
  9374.  thislab%-1
  9375. (    S$="("+Label$(labrepl%+1,K%)+")"
  9376. 1    
  9377.  K%=thislab%-1 
  9378. (S$) 
  9379.  W%=labwidth%
  9380.      Line$+=S$+
  9381. (S$)," ")
  9382.   pos%=!lineanchor%
  9383. heap_store(lineanchor%,LenLine%,0,pos%,0,Line$)
  9384. list_line(REC%,lineanchor%,
  9385. (Line$),32)
  9386.   linesprinted%+=1
  9387. rows_printed%+=1
  9388.  rows_printed%=labrows% 
  9389. L  $(!lineanchor%)=margin$+
  9390. (12):
  9391. list_line(-1,lineanchor%,Lmargin%+1,32)
  9392. list_head(1)
  9393.   rows_printed%=0
  9394.  linesprinted%<labdepth%
  9395. rule_off(32)
  9396.     linesprinted%+=1
  9397. &thislab%=0:thisrow%=-1:Label$()=""
  9398. fixed_line(S$)
  9399.  K%,W%
  9400.  S$<>"" 
  9401.   Line$=margin$
  9402.  K%=0 
  9403.  thislab%-1
  9404. 9    
  9405.  K%=thislab%-1 
  9406.  W%=longestfield% 
  9407.  W%=labwidth%
  9408. (S$)>W% 
  9409. S$,W%)
  9410.      Line$+=S$+
  9411. (S$)," ")
  9412.   pos%=!lineanchor%
  9413. heap_store(lineanchor%,LenLine%,0,pos%,0,Line$)
  9414. list_line(REC%,lineanchor%,
  9415. (Line$),32)
  9416.   linesprinted%+=1
  9417. read_print_options
  9418. thislab%=0:LinesPerPage%=0
  9419.  usekey%=-1 
  9420.  S$=Index$(key%) 
  9421.  S$=Index$(usekey%)+" index"
  9422. Title1$="Ordered by "+S$
  9423. selected(printW%,19) 
  9424.  Title1$+=" ("+
  9425. $+")"
  9426. Title2$=$
  9427. text(printW%,18)
  9428. selected_esg(printW%,2) 
  9429.  4:cpi%=5:p$="3"
  9430.  7:cpi%=10:p$="0"
  9431.  8:cpi%=12:p$="1"
  9432.  6:cpi%=17:p$="2"
  9433. pitch$=
  9434. pitch(p$)
  9435. 3Lmargin%=
  9436. text(printW%,30)):Tab%(0)=Lmargin%
  9437. margin$=
  9438. Lmargin%," ")
  9439. "Tmargin%=
  9440. text(printW%,32))
  9441. #TextLine%=
  9442. text(printW%,34))
  9443. #linefeed%=
  9444. text(printW%,17))
  9445. #colwidth%=
  9446. text(printW%,45))
  9447. *s$=$
  9448. text(printW%,43):s%=
  9449. (s$):c$=
  9450.  s%=0:spacer$=s$
  9451.  c$<"0" 
  9452.  c$>"9":spacer$=
  9453. s%,c$)
  9454. :spacer$=
  9455. s%," ")
  9456.  linefeed%=0 
  9457.  linefeed%=1:$
  9458. text(printW%,17)=
  9459. (linefeed%)
  9460. %pagelength%=
  9461. text(printW%,16))
  9462.  pagelength%=0 
  9463.  pagelength%=70:$
  9464. text(printW%,16)=
  9465. (pagelength%)
  9466. selected_esg(printW%,3) 
  9467.   format$="horiz"
  9468. 9  LinesPerPage%=(pagelength%-Tmargin%-15) 
  9469.  linefeed%
  9470.  24:format$="vert"
  9471.  Form$<>"" 
  9472.  LinesPerPage%=(pagelength%-Tmargin%-15) 
  9473.  (linefeed%*(
  9474. (Form$) 
  9475.   format$="table"
  9476. $$  columns%=
  9477. text(printW%,15))
  9478. %0  column$=
  9479. columns%,"|"+
  9480. colwidth%," "))+"|"
  9481. &9  LinesPerPage%=(pagelength%-Tmargin%-15) 
  9482.  linefeed%
  9483.   format$="label"
  9484. ))  labwidth%=
  9485. text(labelW%,4))*cpi%
  9486. *&  labdepth%=
  9487. text(labelW%,6))*6
  9488. +1  labrows%=(pagelength%-Tmargin%) 
  9489.  labdepth%
  9490.   rows_printed%=0
  9491. -D  labup%=
  9492. selected_esg(labelW%,1):
  9493.  ### Value is 0,1,2 or 26 ###
  9494.  labup%=26 
  9495.  labup%=3
  9496. /$  labrepl%=
  9497. text(labelW%,10))
  9498. 0'  labsubst%=
  9499. text(labelW%,12))-1
  9500. 1&  labcopies%=
  9501. text(labelW%,17))
  9502. 2%  Title$="":Title1$="":Title2$=""
  9503. selected_esg(printW%,4) 
  9504.  38:reportdest$="Window"
  9505.  39:reportdest$="File"
  9506.  41:reportdest$="Printer"
  9507. selected(printW%,54) 
  9508.  page%=1:LinesPerPage%-=2 
  9509.  page%=0
  9510.  LinesPerPage%<=0 
  9511.  LinesPerPage%=1
  9512. pitch(p$)
  9513. selected(printW%,42) 
  9514. (31)+"9"+p$+"01" 
  9515. list_head(place%)
  9516.  place%=0 
  9517.  reportdest$ 
  9518.  "Window","Printer":
  9519.     RU%=
  9520. ($used%)
  9521. EO    
  9522.  RU%<5 
  9523.  textblocksize%=5*LenLine% 
  9524.  textblocksize%=(RU% 
  9525.  5)*LenLine%
  9526. F$    textblockinc%=textblocksize%
  9527. G?    
  9528. extend_named_sliding_block(textanchor%,textblocksize%)
  9529.     TextPtr%=!textanchor%
  9530.     recblocksize%=400
  9531. J=    
  9532. extend_named_sliding_block(recanchor%,recblocksize%)
  9533. K%    
  9534.  "File":
  9535. #texthandle%,pitch$
  9536. extra_lines(Tmargin%,0)
  9537. selected(printW%,47) 
  9538.  header_lines%=Count%:
  9539.  displayed%=-1 
  9540. send_title(Title$)
  9541. send_title(Title1$)
  9542. send_title(Title2$)
  9543.  format$ 
  9544.  "horiz":
  9545. selected(printW%,29) 
  9546. YV    
  9547. selected(printW%,42) 
  9548.  $(!lineanchor%)=uon$:
  9549. list_line(-1,lineanchor%,2,32)
  9550. Z.    
  9551. list_line(-1,headanchor%,LenLine%,32)
  9552. rule_off(45)
  9553. ].    
  9554. list_line(-1,headanchor%,LenLine%,32)
  9555. rule_off(45)
  9556.  "table":
  9557. rule_off(32):$(TextPtr%-3)=uon$
  9558. rule_off(32)
  9559. list_line(-1,headanchor%,LenLine%,32)
  9560. rule_off(32)
  9561.  "vert":
  9562. rule_off(45)
  9563. header_lines%=Count%
  9564. list_line(REC%,anchor%,length%,char%)
  9565. Count%+=1
  9566.  reportdest$ 
  9567.  "Window","Printer":
  9568. pad_line(LenLine%-length%-1,char%)
  9569. heap_store(textanchor%,textblocksize%,textblockinc%,TextPtr%,LenLine%,"")
  9570.  "Wimp_TransferBlock",mytask%,!anchor%,mytask%,TextPtr%,LenLine%
  9571.  Count%*4>=recblocksize% 
  9572.     recblocksize%+=400
  9573. s=    
  9574. extend_named_sliding_block(recanchor%,recblocksize%)
  9575. u"  !(!recanchor%+Count%*4)=REC%
  9576.   TextPtr%+=LenLine%
  9577.  "File":
  9578. pad_line(LenLine%-length%-1,char%)
  9579.  "OS_GBPB",2,texthandle%,!anchor%,LenLine%
  9580. pad_line(bytes%,char%)
  9581.  base%,ptr%,I%
  9582. /base%=!anchor%:ptr%=base%+LenLine%-bytes%-1
  9583.  bytes%>0 
  9584.  I%=0 
  9585.  bytes%-2
  9586.     ptr%?I%=char%
  9587. ptr%?(bytes%-1)=32
  9588. ptr%?bytes%=10
  9589. rule_off(char%)
  9590.  base%
  9591. base%=!lineanchor%
  9592. $base%=margin$
  9593. list_line(-1,lineanchor%,Lmargin%,char%)
  9594. total_list
  9595. selected(printW%,48) 
  9596.  C%,L%,base%,pos%,L$
  9597. #L$=margin$+"Total "+
  9598. (printed%)
  9599. !base%=!lineanchor%:pos%=base%
  9600.  format$ 
  9601.  "horiz":
  9602. selected(printW%,29) 
  9603. rule_off(45)
  9604. ctotals(numfirst%)
  9605. (L$)>LenLine%-2 
  9606.  L$=margin$+
  9607. (printed%)
  9608. heap_store(lineanchor%,LenLine%,0,pos%,0,L$)
  9609. list_line(REC%,lineanchor%,pos%-base%,32)
  9610. selected(printW%,29) 
  9611. rule_off(45)
  9612.  "table":
  9613. rule_off(32)
  9614. extra_lines(linefeed%,colpos%)
  9615. ctotals(numfirst%)
  9616. (L$)>LenLine%-2 
  9617.  L$=margin$+
  9618. (printed%)
  9619. heap_store(lineanchor%,LenLine%,0,pos%,0,L$)
  9620. list_line(REC%,lineanchor%,pos%-base%,32)
  9621. selected(printW%,29) 
  9622. rule_off(45)
  9623.  "vert":
  9624. (L$)>LenLine%-2 
  9625.  L$=margin$+
  9626. (printed%)
  9627. heap_store(lineanchor%,LenLine%,0,pos%,0,L$)
  9628. list_line(REC%,lineanchor%,pos%-base%,32)
  9629. selected(printW%,29) 
  9630. rule_off(45)
  9631. lit(menu%(6),6,
  9632. send_title(T$)
  9633.  C$,L$,P%,L%
  9634.  T$="" 
  9635. L%=LenLine%-Lmargin%-1
  9636. (T$)>=L%
  9637.   P%=
  9638.     P%-=1:C$=
  9639. T$,P%,1)
  9640. "= ,.;:",C$)>0 
  9641.  P%<L%) 
  9642.  P%=0
  9643.  P%=0 
  9644. '    L$=margin$+
  9645. T$,L%-1):T$=
  9646. T$,L%)
  9647. )    
  9648.  L$=margin$+
  9649. T$,P%):T$=
  9650. T$,P%+1)
  9651.   $(!lineanchor%)=L$
  9652. list_line(-1,lineanchor%,
  9653. (L$),32)
  9654. $(!lineanchor%)=margin$+T$
  9655. list_line(-1,lineanchor%,Lmargin%+
  9656. (T$),32)
  9657. screen_list
  9658. !!block%=0:block%!4=-Count%*36
  9659. (block%!8=(LenLine%-1)*16:block%!12=0
  9660.  "Wimp_SetExtent",listW%,block%
  9661. !block%=listW%
  9662.  "Wimp_GetWindowState",,block%
  9663. ;x%=(block%!12+block%!4) 
  9664.  2:y%=(block%!16+block%!8) 
  9665. "block%!12=block%!4+LenLine%*16
  9666.  Count%<28 
  9667. "  block%!16=block%!8+Count%*36
  9668.   block%!16=block%!8+36*28
  9669.  "Wimp_CloseWindow",,block%
  9670. open_window(listW%)
  9671. Listed%=
  9672. show_menu(menu%(18),x%,y%)
  9673. sort_list(N%)
  9674. >ind%=!textanchor%+LenLine%*header_lines%+Tab%(N%)-LenLine%
  9675.  I%=0 
  9676.  printed%-1
  9677.   ind%+=LenLine%
  9678.   block%!(I%*4)=ind%
  9679.  "OS_HeapSort",printed%,block%,4
  9680. extend_named_sliding_block(tempanchor%,printed%*LenLine%)
  9681. 3dest%=!tempanchor%-LenLine%:recptr%=!recanchor%
  9682.  I%=0 
  9683.  printed%-1
  9684.   recptr%!(I%*4)=-1
  9685. (  ind%=block%!(I%*4):dest%+=LenLine%
  9686.  "Wimp_TransferBlock",mytask%,ind%-Tab%(N%),mytask%,dest%,LenLine%
  9687.  "Wimp_TransferBlock",mytask%,!tempanchor%,mytask%,!textanchor%+LenLine%*header_lines%,printed%*LenLine%
  9688. scrap_sliding_block(tempanchor%)
  9689. redraw(listW%)
  9690. lose_list
  9691. close_window(listW%)
  9692. scrap_sliding_block(textanchor%)
  9693. scrap_sliding_block(recanchor%)
  9694. Listed%=
  9695. parse
  9696.  val%,I%,P%,F%,f1%,f2%,t%,flag%,left%,right%,search$,field$,op$,bo$,target$,targ$,f$,t$,E$,E1$,TitFd$,TitTg$,simple%,date$,SF$,S$,case%
  9697. !S$=$Query%:
  9698.  S$="" 
  9699.  S$="ALL"
  9700. (query$=S$:case%=
  9701. selected(queryW%,1)
  9702. usekey%=-1:useval$=""
  9703. stripspaces(S$)
  9704.  S$="" 
  9705. u(S$)="ALL" 
  9706.  Title$=
  9707. leaf($database%),2)+". All records":="TRUE"
  9708. simple%=
  9709. simple(S$)
  9710. S$+=" ":Title$=""
  9711. (S$)>0
  9712.   W$=
  9713. word(S$," ")
  9714.  W$="NOT" 
  9715. S$,1)<>"(" 
  9716.  moan_err%,
  9717. msg("Err60")
  9718. strip_brackets
  9719. (W$)>0 
  9720. *    flag%=
  9721. :TitFd$="":TitTg$="":op$=""
  9722. 5      
  9723.  "AND","OR","NOT":E$=W$:Title$+=" "+E$+" "
  9724. +      
  9725.  "&":E$="AND":Title$+=" "+E$+" "
  9726.       
  9727.       E$=""
  9728.       
  9729. split
  9730.       
  9731. (field$)>0
  9732. 0        f$=
  9733. word(field$,",")):f1%=0:f2%=0
  9734.         
  9735.     <          
  9736.  f$="@":f1%=1:f2%=fields%:TitFd$="Any field "
  9737.           
  9738. f$,"-")>0:
  9739.           P%=
  9740. f$,"-")
  9741. %          f1%=
  9742. field(
  9743. f$,P%-1),
  9744. !          TitFd$=
  9745. TitFd$)+"-"
  9746. %          f2%=
  9747. field(
  9748. f$,P%+1),
  9749. $          
  9750.  f1%>f2% 
  9751.  f1%,f2%
  9752.           
  9753.           f1%=
  9754. field(f$,
  9755. !          f$="F$("+
  9756. (f1%)+")"
  9757. *          
  9758.  case% 
  9759.  f$="FNu("+f$+")"
  9760. '          
  9761.  val% 
  9762.  f$="VAL("+f$+")"
  9763. !          
  9764.  chartype%(f1%) 
  9765. 5            
  9766.  5,51,52:f$="FNreverse_date("+f$+")"
  9767.           
  9768.         
  9769.         targ$=target$
  9770.         
  9771. (targ$)>0
  9772. '          t$=
  9773. word(targ$,","):u$=t$
  9774. C          
  9775.  flag% 
  9776.  TitTg$+=
  9777. expand(t$,link$(f1%),L%,SF$)+","
  9778. !          
  9779.  chartype%(f1%) 
  9780. 0            
  9781.  41,42,43,44,45:t$=
  9782. pos_neg(t$)
  9783. U            
  9784.  5,51,52:
  9785. check_date(t$,2,date$)=
  9786. reverse_date(date$):u$=t$
  9787.           
  9788. !7          t$=""""+t$+"""":
  9789.  val% 
  9790.  t$="VAL("+t$+")"
  9791.           
  9792.  f2%>0 
  9793.             
  9794.  val% 
  9795. $T              E1$="FNvany("+
  9796. (f1%)+","+
  9797. (f2%)+","+t$+","""+op$+""","""+bo$+""")"
  9798. %U              
  9799.  E1$="FNany("+
  9800. (f1%)+","+
  9801. (f2%)+","+t$+","""+op$+""","""+bo$+""")"
  9802.             
  9803. '6            
  9804.  E1$=
  9805. element(op$,f1%,chartype%(f1%))
  9806.           
  9807. )E          
  9808. (E$)+
  9809. (E1$)>255 
  9810.  moan_err%,
  9811. msg("Err6") 
  9812.  E$+=E1$
  9813. *E          
  9814. (E$)+
  9815. (bo$)>255 
  9816.  moan_err%,
  9817. msg("Err6") 
  9818.  E$+=bo$
  9819.         
  9820.         flag%=
  9821.       
  9822.       E$=
  9823. (E$)-
  9824. (bo$))
  9825.       
  9826. E$,bo$)>0 
  9827. 0B        
  9828. (E$)>253 
  9829.  moan_err%,
  9830. msg("Err6") 
  9831.  E$="("+E$+")"
  9832.       
  9833. 2        
  9834. add_brackets
  9835.   E$+=" "
  9836. (search$)+
  9837. (E$)>255 
  9838. 7     
  9839.  moan_err%,
  9840. msg("Err6")
  9841.  search$+=E$
  9842. build_title
  9843. <,Title$=
  9844. leaf($database%),2)+". "+Title$
  9845.  usekey%>=0 
  9846.  kl%=KL%(usekey%):val$=
  9847. type(usekey%)
  9848. =search$
  9849. pos_neg(s$)
  9850.  "+","y","Y","*","
  9851. ","T","t","YES","Yes","yes","TRUE","True":s$=" "
  9852.  "-","n","N","x","X","F","f","NO","No","no","FALSE","False":s$=""
  9853. :s$="@"
  9854. simple(S$)
  9855. S$,"=")>0 
  9856. S$,",")=0 
  9857. S$,"-")=0 
  9858. S$,"OR")=0 
  9859. S$,"NOT")=0) 
  9860. word(
  9861.  S$,sep$)
  9862.  P%,W$,Q1%,Q2%
  9863. N'  Q1%=
  9864. S$,""""):Q2%=
  9865. S$,"""",Q1%+1)
  9866.   P%=
  9867. S$,sep$,P%)
  9868. Q-    
  9869.  (P%>Q1% 
  9870.  P%<Q2%),(P%>Q2% 
  9871.  Q2%>0):
  9872. R5    S$=
  9873. S$,Q1%-1)+
  9874. S$,Q1%+1,Q2%-Q1%-1)+
  9875. S$,Q2%+1)
  9876. S9    P%=Q2%-1:
  9877.  ### S$ is now 2 characters shorter ###
  9878. T)    
  9879.  Q1%>0 
  9880.  Q2%=0:
  9881. softerror("",93)
  9882. U     S$=
  9883. S$,Q1%-1)+
  9884. S$,Q1%+1)
  9885.  Q1%+Q2%=0 
  9886.  P%<Q1%
  9887. S$,P%-1)
  9888. S$,P%+1)
  9889. S$,1)=sep$
  9890.   S$=
  9891. S$,2)
  9892. element(op$,f%,char%)
  9893.  op$ 
  9894.  "{":
  9895.  char% 
  9896. d5    
  9897.  36,39:E$="FNinmemo("+
  9898. (f%)+","+t$+")=TRUE "
  9899. e%    
  9900. :E$="INSTR("+f$+","+t$+")>0"
  9901.  "}{":
  9902.  char% 
  9903. i6    
  9904.  36,39:E$="FNinmemo("+
  9905. (f%)+","+t$+")=FALSE "
  9906. j%    
  9907. :E$="INSTR("+f$+","+t$+")=0"
  9908.  "=":
  9909.   E$=f$+op$+t$
  9910.  simple%=
  9911.  usekey%=-1 
  9912.     foundkey%=
  9913. is_a_key(f%)
  9914. p4    
  9915.  foundkey%>=0 
  9916.  KL%(foundkey%)=len%(f%) 
  9917. q&      usekey%=foundkey%:useval$=u$
  9918. r        
  9919.  "$":E$="FNwc("+f$+","+t$+")=TRUE "
  9920. ":E$="FNwc("+f$+","+t$+")=FALSE "
  9921. :E$=f$+op$+t$
  9922. vany(from%,to%,t%,op$,bo$)
  9923.  F%,found%,v%,bo%
  9924. bo%=(bo$="OR")
  9925. F%=from%-1
  9926.   F%+=1:v%=
  9927. (F$(F%))
  9928.  op$ 
  9929.  "=":found%=(v%=t%)
  9930.  "<>":found%=(v%<>t%)
  9931.  "<":found%=(v%<t%)
  9932.  ">":found%=(v%>t%)
  9933.  "<=":found%=(v%<=t%)
  9934.  ">=":found%=(v%>=t%)
  9935.  (bo%=found%) 
  9936.  F%=to%
  9937. =found%
  9938. any(from%,to%,t$,op$,bo$)
  9939.  F%,found%,f$,bo%,case%
  9940. case%=
  9941. selected(queryW%,1)
  9942. bo%=(bo$="OR")
  9943. F%=from%-1
  9944.   F%+=1:f$=F$(F%)
  9945.  case% 
  9946. u(f$)
  9947.  op$ 
  9948.  "{":
  9949.  chartype%(F%) 
  9950.       
  9951.  36,39:
  9952.       found%=
  9953. inmemo(F%,t$)
  9954.       
  9955. :found%=(
  9956. f$,t$)>0) 
  9957.         
  9958.  "}{":
  9959.  chartype%(F%) 
  9960.       
  9961.  36,39:
  9962. #      found%=(
  9963. inmemo(F%,t$))
  9964.       
  9965. :found%=(
  9966. f$,t$)=0)
  9967.         
  9968.  "=":found%=(f$=t$)
  9969.  "<>":found%=(f$<>t$)
  9970.  "<":found%=(f$<t$)
  9971.  ">":found%=(f$>t$)
  9972.  "<=":found%=(f$<=t$)
  9973.  ">=":found%=(f$>=t$)
  9974.  (bo%=found%) 
  9975.  F%=to%
  9976. =found%
  9977. split
  9978.  X$,Q%,I%,t$
  9979. 8X$=">=>=,<=<=,<>,}{,>=,<=,==,>>,<<,{{,=,<,>,{,":P%=0
  9980. (X$)>0 
  9981.  P%=0
  9982. 8  Q%=
  9983. X$,","):op$=
  9984. X$,Q%-1):X$=
  9985. X$,Q%+1):P%=
  9986. W$,op$)
  9987.  P%>0 
  9988.   field$=
  9989. W$,P%-1)
  9990.    target$=
  9991. W$,P%+
  9992. (op$))+","
  9993.  case% 
  9994.  target$=
  9995. u(target$)
  9996.   field$+=","
  9997.  op$ 
  9998.  "<>","}{":bo$="AND"
  9999. D    
  10000.  op$="<>" 
  10001. target$,$wc%)>0 
  10002. target$,$ws%)>0) 
  10003.  op$="
  10004.  "<=",">=":bo$="OR"
  10005.  "<=<=",">=>=":
  10006.     op$=
  10007. op$,2):bo$="AND"
  10008.  "==","<<",">>","{{":
  10009.     op$=
  10010. op$,1):bo$="AND"
  10011. :bo$="OR"
  10012. C    
  10013.  op$="=" 
  10014. target$,$wc%)>0 
  10015. target$,$ws%)>0) 
  10016.  op$="$"
  10017.  moan_err%,
  10018. msg("Err40")
  10019. fnum(S$)
  10020.  S$="KK" 
  10021. =MaxFields%+1
  10022. ("&"+S$)
  10023. newline%=((N% 
  10024.  128)>0)
  10025. =(N% 
  10026.  127)
  10027. field(f$,Z%)
  10028.  I%,F%,desc$
  10029. val%=
  10030. f$,1)="[" 
  10031. f$)="]" 
  10032. f$),2):val%=
  10033.  I%<fields%
  10034.   I%+=1
  10035. u(Tag$(I%))=
  10036. u(f$) 
  10037.  F%=I%
  10038.  F%>0 
  10039. $  desc$=$
  10040. text(mainW%,desc%(F%))
  10041.  desc$<>"" 
  10042.  TitFd$+=desc$+"," 
  10043.  TitFd$+=f$+","
  10044.  moan_err%,
  10045. msg("Err8,"+f$)
  10046.  chartype%(F%) 
  10047.  3,6,46,47,54,56,57:val%=
  10048. find_fields(S$,sep$,
  10049.  length%)
  10050.  f$,F$,C$,P%,Q%,F%
  10051. Q%=1:length%=0
  10052.   P%=
  10053. S$,sep$,Q%)
  10054.  P%>0 
  10055. S$,Q%,P%-Q%)
  10056.   F%=
  10057. field(f$,
  10058.   length%+=len%(F%)+1
  10059.   F$=
  10060. ~(F%)
  10061. (F$)=1 
  10062.  F$="0"+F$
  10063.   C$+=F$
  10064.   Q%=P%+1
  10065. length%+=
  10066. (RA%))+1
  10067. strip_brackets
  10068. W$,1)="("
  10069.   left%+=1:W$=
  10070. W$,2)
  10071. W$)=")"
  10072.   right%+=1:W$=
  10073. add_brackets
  10074.  left%>0
  10075.   E$="("+E$:left%-=1
  10076.  right%>0
  10077.   E$+=")":right%-=1
  10078. build_title
  10079.  change%
  10080. #TitFd$=
  10081. TitFd$):TitTg$=
  10082. TitTg$)
  10083. TitFd$,",")>0 
  10084. TitFd$,"-")>0 
  10085.  bo$ 
  10086. &    
  10087.  "OR":TitFd$="One of:"+TitFd$
  10088.  "AND":
  10089.  op$ 
  10090. ;      
  10091.  "<>":TitFd$="None of:"+TitFd$:op$="=":change%=
  10092. ;      
  10093.  "}{":TitFd$="None of:"+TitFd$:op$="{":change%=
  10094.     #      
  10095. :TitFd$="All of:"+TitFd$
  10096.         
  10097. TitTg$,",")>0 
  10098.  bo$ 
  10099. &    
  10100.  "OR":TitTg$="one of:"+TitTg$
  10101.  "AND":
  10102.  op$ 
  10103. 1      
  10104.  "<>":TitTg$="none of:"+TitTg$:op$="="
  10105. 1      
  10106.  "}{":TitTg$="none of:"+TitTg$:op$="{"
  10107. '      
  10108. ":TitTg$="any of:"+TitTg$
  10109. I      
  10110.  change% 
  10111.  TitTg$="any of:"+TitTg$ 
  10112.  TitTg$="all of:"+TitTg$
  10113.         
  10114.  op$ 
  10115.  "{":op$=" contains "
  10116.  "}{":op$=" does not contain "
  10117.  "$":op$=" has wild-card match with "
  10118. ":op$=" does not have wild-card match with ":
  10119. Title$+=TitFd$+op$+TitTg$
  10120. expand(string$,table$,
  10121.  ExpLen%,
  10122.  subst$)
  10123.  p$,s$,start%,F%,I%,T%,ind%,row%,Rec%,Rows%,TabFields%,field%,subst%,exact%,pos%
  10124. subst$=string$
  10125.  table$="" 
  10126.  ExpLen%=0:=string$:
  10127.  ### Not linked ###
  10128. &*field%=
  10129. trailing_number(table$,exact%)
  10130. '"subst%=
  10131. leading_number(table$)
  10132.  ### field% is the linked field, subst% (if >=0) is the one to substitute on entry ###
  10133. table_number(table$)
  10134.  T%<0 
  10135.  ExpLen%=0:=string$:
  10136.  ### Table not found ###
  10137. p$=printrel$(T%)
  10138. ,`NewTab%=(
  10139. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)="
  10140. -*extra%=-NewTab%*(Rows%*(TabFields%+1))
  10141.  subst%>=0 
  10142.  pos%=
  10143. table_field(subst%,tabfieldlen%()) 
  10144.  pos%=
  10145. table_field(field%,tabfieldlen%())
  10146.  p$<>"" 
  10147.   ExpLen%=0
  10148.  I%=1 
  10149. (p$) 
  10150.     F%=
  10151. p$,I%,3))
  10152. 3#    ExpLen%+=tabfieldlen%(F%)+2
  10153.   ExpLen%-=2
  10154.  ExpLen%=tabfieldlen%(1)
  10155. 88start%=!tabanchor%(T%)+offset%-Rec%:ind%=start%+pos%
  10156.   row%+=1:ind%+=Rec%
  10157.  row%>Rows% 
  10158.  $ind%=subst$
  10159.  row%>Rows% 
  10160.  subst$="":=string$:
  10161.  ## String not in table ###
  10162. =;ind%=start%+row%*Rec%:
  10163.  subst%>=0 
  10164.  subst$=$(ind%+pos%)
  10165.  p$<>"" 
  10166.  I%=1 
  10167. (p$) 
  10168.     F%=
  10169. p$,I%,3))
  10170. A,    pos%=
  10171. table_field(F%,tabfieldlen%())
  10172. B4    s$+=
  10173. pad($(ind%+pos%),tabfieldlen%(F%))+"  "
  10174.   s$=
  10175.  ind%+=tabfieldlen%(0)+1:s$=$ind%:
  10176.  ### Return 2nd field ###
  10177. n(F%)
  10178.  T%,row%,ind%,start%,Rows%,Rec%,TabFields%,pos%,valpos%,N%,field%,subst%,table$,S$,exact%
  10179.  link$(F%)="" 
  10180. S$=$Rf%(F%)
  10181. table$=link$(F%)
  10182. N*field%=
  10183. trailing_number(table$,exact%)
  10184. O"subst%=
  10185. leading_number(table$)
  10186. P/table%=
  10187. table_number(table$):
  10188.  table%<0 
  10189. QYT$=
  10190. table_info(table%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  10191.  TabFields%=field% 
  10192. softerror("",54):=0
  10193.  subst%>0 
  10194. T.  pos%=
  10195. table_field(subst%,tabfieldlen%())
  10196.  pos%=
  10197. table_field(field%,tabfieldlen%())
  10198. W1valpos%=
  10199. table_field(field%+1,tabfieldlen%())
  10200. X+start%=!tabanchor%(table%)+offset%-Rec%
  10201.  row%+=1
  10202. Z   ind%=start%+row%*Rec%+pos%
  10203.  row%>Rows% 
  10204.  S$=$ind%
  10205.  row%<=Rows% 
  10206. ]#  ind%=start%+row%*Rec%+valpos%
  10207.   N%=
  10208. ($ind%)
  10209.  N%=0
  10210. pad(s$,L%)
  10211. (s$)<L%
  10212.   s$+=" "
  10213. stripspaces(s$)
  10214. s$)=" "
  10215.   s$=
  10216. trim(wi%,ic%)
  10217. selected(prefsW%,42) 
  10218. text(wi%,ic%)=
  10219. stripspaces($
  10220. text(wi%,ic%))
  10221. redraw_icon(wi%,ic%)
  10222. include_fields
  10223.  Hdlen%,Datlen%,hlm%,dlm%,I%,F%,f$,Head$,limit%,pad%,col%,fail%,n$,y$,SF$,memo%,base%,pos%,blocksize%,blockinc%
  10224. x'blocksize%=256:blockinc%=blocksize%
  10225. extend_named_sliding_block(headanchor%,blocksize%)
  10226. z!base%=!headanchor%:pos%=base%
  10227. heap_store(headanchor%,blocksize%,blockinc%,pos%,0,margin$)
  10228. selected(matchW%,7) 
  10229.  Form$="KK"+Form$
  10230. selected(matchW%,5) 
  10231.  Form$="00"+Form$
  10232.  I%=1 
  10233. (Form$)-1 
  10234.   F%=
  10235. fnum(
  10236. Form$,I%,2))
  10237.  chartype%(F%) 
  10238. 0    
  10239.  36,39:dlm%=TextLine%:memo%=
  10240. set_vert
  10241.  41,42,43,44,45:
  10242. !    Datlen%=
  10243. no_yes(F%,n$,y$)
  10244. E    
  10245.  ### Get data length for strings printed for check boxes ###
  10246. selected(printW%,11) 
  10247. selected (printW%,40) 
  10248. /    f$=
  10249. expand("@#*",link$(F%),Datlen%,SF$)
  10250. )    
  10251.  Datlen%=0 
  10252.  Datlen%=maxlen%(F%)
  10253.         
  10254.     Datlen%=maxlen%(F%)
  10255. selected(printW%,2) 
  10256.  Head$=$
  10257. text(mainW%,(desc%(F%))) 
  10258.  Head$=Tag$(F%)
  10259.  F%=0 
  10260.  Head$="RECORD":Datlen%=6
  10261.  F%=MaxFields%+1 
  10262.  Datlen%=KL%(key%):Head$="KEY"
  10263.  Datlen%>dlm% 
  10264.  dlm%=Datlen%
  10265.   Hdlen%=
  10266. (Head$)
  10267.  Hdlen%>hlm% 
  10268.  hlm%=Hdlen%
  10269.  format$ 
  10270.  "horiz","table":
  10271. -    pad%=Datlen%-Hdlen%:
  10272.  pad%<0 
  10273.  pad%=0
  10274.  chartype%(F%) 
  10275. c      
  10276.  3,6,46,47,54,56,57:
  10277. selected(printW%,11) 
  10278.  Head$+=
  10279. pad%," ") 
  10280.  Head$=
  10281. pad%," ")+Head$
  10282. A      
  10283.  ### Right justify numbers unless Expand option on ###
  10284.       
  10285. :Head$+=
  10286. pad%," ")
  10287.         
  10288. J    
  10289. heap_store(headanchor%,blocksize%,blockinc%,pos%,0,Head$+spacer$)
  10290. #    Tab%((I%+1) 
  10291.  2)=pos%-base%
  10292.  format$ 
  10293.  "horiz":L%=pos%-base%+2
  10294.  "vert":L%=TextLine%+5:Tab%(1)=hlm%
  10295.  "table":
  10296.   col%=
  10297. (column$)
  10298. heap_store(headanchor%,blocksize%,blockinc%,pos%,0,column$+" ")
  10299.   ?pos%=10:L%=pos%-base%+1
  10300.  "label":
  10301.   longestfield%=dlm%
  10302. )  L%=labup%*labwidth%+dlm%+Lmargin%+1
  10303. extend_named_sliding_block(lineanchor%,L%+8)
  10304. no_yes(F%,
  10305.  no$,
  10306.  yes$)
  10307.  P%,V$,L%
  10308. val(mainW%,field%(F%))
  10309. V$,"Q")
  10310.  P%>0 
  10311.   V$=
  10312. V$,P%+1)
  10313.   P%=
  10314. V$,",")
  10315.   no$=
  10316. V$,P%-1)
  10317.   yes$=
  10318. V$,P%+1)
  10319.  no$="N":yes$="Y"
  10320. (no$)
  10321. (yes$)>L% 
  10322. (yes$)
  10323. heap_store(anchor%,
  10324.  size%,inc%,
  10325.  ptr%,L%,string$)
  10326.  string$<>"" 
  10327. (string$)
  10328.  ptr%-!anchor%+L%+1>size% 
  10329.   size%+=inc%
  10330. extend_named_sliding_block(anchor%,size%)
  10331.  string$<>"" 
  10332.  $ptr%=string$:ptr%+=L%:?ptr%=10
  10333. set_vert
  10334. deselect(printW%,23)
  10335. deselect(printW%,25)
  10336. deselect(printW%,26)
  10337. select(printW%,24)
  10338. format$="vert"
  10339. ?LinesPerPage%=(pagelength%-10) 
  10340.  (linefeed%*(
  10341. (Form$) 
  10342.  LinesPerPage%=0 
  10343.  LinesPerPage%=1
  10344. save_selection
  10345.  P%,T%,I%,F%,J%
  10346. -P%=savebuff%:$P%=printorder$:P%+=
  10347. ($P%)+1
  10348.  T%=0 
  10349.  LastTable%
  10350. # $P%=printrel$(T%):P%+=
  10351. ($P%)+1
  10352. $P%="***":P%+=
  10353. ($P%)+1
  10354.  I%=1 
  10355. (printorder$)-1 
  10356. "  F%=
  10357. fnum(
  10358. printorder$,I%,2))
  10359.  chartype%(F%) 
  10360.  3,6,8,46,47,54,56,57:
  10361.  J%=0 
  10362. L      
  10363. selected(pselectW%,(calcrow%?F%)*8+2+J%) 
  10364.  $P%="ON" 
  10365.  $P%="OFF"
  10366.       P%+=
  10367. ($P%)+1
  10368. 8Start%=savebuff%:End%=Start%+P%-savebuff%:Type%=&7F3
  10369. load_selection(f$)
  10370.  F%,I%,T%,F,new%
  10371. clear_selection
  10372. printorder$=
  10373. T%=-1:printrel$()=""
  10374.  p$<>"***"
  10375.   T%+=1
  10376.   p$=
  10377.  p$<>"" 
  10378.  p$<>"***" 
  10379. select(printW%,11)
  10380.     printrel$(T%)=p$
  10381.  tableW%(T%)>0 
  10382. f      NewTab%=(
  10383. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)="
  10384. 0      extra%=-NewTab%*(Rows%*(TabFields%+1))
  10385.       
  10386.  I%=1 
  10387. (p$) 
  10388. $        tablefield%=
  10389. p$,I%,3))
  10390. 3        
  10391. select(tableW%(T%),tablefield%+extra%)
  10392.       
  10393.         
  10394.  I%=1 
  10395. (printorder$)-1 
  10396. "  F%=
  10397. fnum(
  10398. printorder$,I%,2))
  10399.  chartype%(F%) 
  10400.  41,42,43,44,45:
  10401. .    col%=
  10402. get_icon_cols(mainW%,field%(F%))
  10403. 0    col%=((col%>>4) 
  10404.  (col%<<4)) 
  10405.  %11111111
  10406. .    
  10407. set_icon_cols(mainW%,field%(F%),col%)
  10408.  3,6,8,46,47,54,56,57:
  10409. "    
  10410. select(mainW%,field%(F%))
  10411. "    
  10412. enable_row(calcrow%?F%,
  10413.  J%=0 
  10414. H      
  10415. set_icon(pselectW%,(calcrow%?F%)*8+2+J%,(
  10416. #F="ON"))
  10417. $    
  10418. select(mainW%,field%(F%))
  10419. close_file(F)
  10420. lit(menu%(6),6,
  10421. lit(menu%(6),7,
  10422. lit(menu%(1),7,
  10423. select_range(first%,last%,show%)
  10424.  F%,T%,F$,wi%,ic%
  10425.  first%>last% 
  10426.  first%,last%
  10427.  first%=1 
  10428.  last%=fields% 
  10429.  printorder$="" 
  10430.  printorder$=
  10431. printorder$))
  10432. wi%=mainW%
  10433.  F%=first% 
  10434.  last%
  10435.   ic%=field%(F%)
  10436.  chartype%(F%) 
  10437.  41,42,43,44,45:
  10438. $    col%=
  10439. get_icon_cols(wi%,ic%)
  10440. F    
  10441.  (col% 
  10442.  %1111)>=2 
  10443.  col%=((col%>>4) 
  10444.  (col%<<4)) 
  10445.  %11111111
  10446. .    
  10447.  show% 
  10448. set_icon_cols(wi%,ic%,col%)
  10449. '    F$=
  10450. ~(F%):
  10451. (F$)=1 
  10452.  F$="0"+F$
  10453.     printorder$+=F$
  10454.  0,1,2,4,5,7,8:
  10455.  len%(F%)>0 
  10456. )      F$=
  10457. ~(F%):
  10458. (F$)=1 
  10459.  F$="0"+F$
  10460.       printorder$+=F$
  10461.  $      
  10462.  show% 
  10463. select(wi%,ic%)
  10464. !        
  10465. #'    F$=
  10466. ~(F%):
  10467. (F$)=1 
  10468.  F$="0"+F$
  10469.     printorder$+=F$
  10470. %$    col%=
  10471. get_icon_cols(wi%,ic%)
  10472. &0    col%=((col%>>4) 
  10473.  (col%<<4)) 
  10474.  %11111111
  10475. '.    
  10476.  show% 
  10477. set_icon_cols(wi%,ic%,col%)
  10478. (%    
  10479.  39,48,49,50,51,52,53,55,58:
  10480. )'    F$=
  10481. ~(F%):
  10482. (F$)=1 
  10483.  F$="0"+F$
  10484.     printorder$+=F$
  10485. +"    
  10486.  show% 
  10487. select(wi%,ic%)
  10488.  3,6,46,47,54,56,57:
  10489. -'    F$=
  10490. ~(F%):
  10491. (F$)=1 
  10492.  F$="0"+F$
  10493.     printorder$+=F$
  10494. /=    
  10495.  show% 
  10496. select(wi%,ic%):
  10497. enable_row(calcrow%?F%,
  10498. lit(menu%(6),6,
  10499. lit(menu%(6),7,
  10500. lit(menu%(1),7,
  10501. clear_selection
  10502.  F%,T%,new%
  10503.  F%=1 
  10504.  fields%
  10505.  chartype%(F%) 
  10506.  36,41,42,43,44,45:
  10507. <.    col%=
  10508. get_icon_cols(mainW%,field%(F%))
  10509. =E    
  10510.  (col% 
  10511.  %1111)<2 
  10512.  col%=((col%>>4) 
  10513.  (col%<<4)) 
  10514.  %11111111
  10515. >.    
  10516. set_icon_cols(mainW%,field%(F%),col%)
  10517. ?V    
  10518.  3,6,8,46,47,54,56,57:
  10519. enable_row(calcrow%?F%,
  10520. deselect(mainW%,field%(F%))
  10521. @&    
  10522. deselect(mainW%,field%(F%))
  10523. printorder$=""
  10524.  T%=0 
  10525.  LastTable%
  10526. Eb  NewTab%=(
  10527. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)="
  10528. F,  extra%=-NewTab%*(Rows%*(TabFields%+1))
  10529.   p$=printrel$(T%)
  10530.  p$<>"" 
  10531.  tableW%(T%)>0 
  10532.       
  10533.  I%=1 
  10534. (p$) 
  10535. K$        tablefield%=
  10536. p$,I%,3))
  10537. L5        
  10538. deselect(tableW%(T%),tablefield%+extra%)
  10539.       
  10540. N        
  10541. printrel$()=""
  10542. lit(menu%(6),6,
  10543. lit(menu%(6),7,
  10544. lit(menu%(1),7,
  10545. load_query(f$,wi%,ic%)
  10546.  wi% 
  10547.  mainW%:
  10548.  ic% 
  10549. [D    
  10550.  field%(buttonfield%(0,22)):
  10551. select(wi%,ic%):
  10552. filter(wi%,
  10553. \.    
  10554. selected(passW%,14) 
  10555. match(0,0)
  10556.  keypadW%:
  10557. select(wi%,22):
  10558. filter(wi%,
  10559.  "OS_File",255,f$,Query%
  10560. query$=$Query%
  10561. set_caret(queryW%,0)
  10562. redraw_icon(queryW%,0)
  10563. design_field(b%,ic%,menu%)
  10564.  w%,h%
  10565. posx%=x%:posy%=y%
  10566. i3!block%=mainW%:
  10567.  "Wimp_GetWindowState",,block%
  10568. x%+=block%!20-block%!4
  10569. y%+=block%!24-block%!16
  10570.  %1111111 
  10571.  (ic% 
  10572.  2)=1 
  10573.  drag%=6:dragbutt%=16 
  10574.  drag%=5:dragbutt%=64
  10575. init_drag(mainW%,ic%,drag%)
  10576. icon_bit(22,createW%,44,(fields%>0))
  10577.   fieldfunc$="create"
  10578.   $InsText%=""
  10579. deselect(createW%,
  10580. selected_esg(createW%,1))
  10581.  ic%>=0 
  10582. lit(menu%(9),0,
  10583. wB    !block%=mainW%:block%!4=ic%:
  10584.  "Wimp_GetIconState",,block%
  10585. xM    x%=block%!8:y%=block%!12:w%=block%!16-block%!8:h%=block%!20-block%!12
  10586. y$    Fieldnumber%=
  10587. get_field(ic%)
  10588. z%    type%=chartype%(Fieldnumber%)
  10589.  type% 
  10590.       
  10591.  0,1,2,3,4,5,6,7,8:
  10592.       
  10593. select(createW%,21)
  10594.       
  10595. set_limits(0,0,8,8)
  10596.       
  10597.  36,37,38,39,40:
  10598.       
  10599. select(createW%,22)
  10600. "      
  10601. set_limits(36,36,40,11)
  10602.       
  10603.  41,42,43,44,45:
  10604.       
  10605. select(createW%,24)
  10606. "      
  10607. set_limits(41,41,45,14)
  10608. 6      
  10609.  46,47,48,49,50,51,52,53,54,55,56,57,58,59:
  10610.       
  10611. select(createW%,35)
  10612. "      
  10613. set_limits(46,46,59,16)
  10614.       
  10615.       
  10616. select(createW%,23)
  10617.        
  10618. set_limits(9,9,35,19)
  10619.         
  10620.     fieldtype%=type%
  10621. R    
  10622. tick_one(menu%(menunumber%),0,lasttype%-firsttype%,fieldtype%-firsttype%)
  10623. 4    $FtitleText%="Modify field "+
  10624. (Fieldnumber%)
  10625. 5    $DescText%=$
  10626. text(mainW%,desc%(Fieldnumber%))
  10627. $    $TagText%=Tag$(Fieldnumber%)
  10628. '    $LenText%=
  10629. (len%(Fieldnumber%))
  10630. $    $ValText%=vname$(fieldtype%)
  10631. l    
  10632.  fix%(Fieldnumber%)>0 
  10633.  $Fixpt%=
  10634. (fix%(Fieldnumber%)):
  10635. select(createW%,14) 
  10636. deselect(createW%,14)
  10637. :    
  10638. icon_bit(22,createW%,13,(
  10639. selected(createW%,14)))
  10640. ?    
  10641. icon_bit(22,createW%,14,(fieldtype%=3 
  10642.  fieldtype%=6))
  10643. #    
  10644. icon_bit(22,createW%,18,
  10645. [    
  10646. icon_bit(22,createW%,6,(fieldtype%<9 
  10647.  fieldtype%=46 
  10648.  fieldtype%=47) 
  10649.  adjust%)
  10650. +    
  10651. icon_bit(22,createW%,30,
  10652.  adjust%)
  10653. #    
  10654. icon_bit(22,createW%,29,
  10655. @    
  10656. icon_bit(22,createW%,15,(fieldtype%=3 
  10657.  fieldtype%=47))
  10658. 0    
  10659. icon_bit(22,createW%,25,(fieldtype%=3))
  10660. *    C$=calc$(Fieldnumber%):P%=
  10661. C$,"|")
  10662. 8    
  10663.  P%>0 
  10664.  $mintext%=
  10665. C$,P%-1):$maxtext%=
  10666. C$,P%+1)
  10667.  I%=21 
  10668. -      
  10669. icon_bit(22,createW%,I%,
  10670.  adjust%)
  10671. +    
  10672. icon_bit(22,createW%,35,
  10673.  adjust%)
  10674. +    
  10675. icon_bit(22,createW%,39,
  10676.  adjust%)
  10677. +    
  10678. icon_bit(22,createW%,40,
  10679.  adjust%)
  10680.         
  10681. "    
  10682. lit(menu%(9),0,
  10683.  adjust%)
  10684. select(createW%,21)
  10685. set_limits(0,0,8,8)
  10686. .    $FtitleText%="New field "+
  10687. (fields%+1)
  10688. /    $DescText%="":$TagText%="":$LenText%=""
  10689. -    $Fixpt%="2":$mintext%="":$maxtext%=""
  10690. deselect(createW%,14)
  10691. #    
  10692. icon_bit(22,createW%,13,
  10693. #    
  10694. icon_bit(22,createW%,14,
  10695. #    
  10696. icon_bit(22,createW%,15,
  10697. #    
  10698. icon_bit(22,createW%,25,
  10699. #    
  10700. icon_bit(22,createW%,29,
  10701. #    
  10702. icon_bit(22,createW%,30,
  10703. #    
  10704. icon_bit(22,createW%,39,
  10705. #    
  10706. icon_bit(22,createW%,40,
  10707. +    
  10708. icon_bit(22,createW%,18,
  10709.  adjust%)
  10710.  (ic% 
  10711.  2)=1 
  10712. ;    $boxX%=
  10713. (x%):$boxY%=
  10714. (y%):$boxW%=
  10715. (w%):$boxH%=
  10716. B    
  10717.  x%+=w%+8:$boxX%=
  10718. (x%):$boxY%=
  10719. (y%):$boxW%="0":$boxH%="0"
  10720. close_window(createW%)
  10721.  menu% 
  10722. .    
  10723. show_menu(menu%(9),posx%-64,posy%-20)
  10724. G    
  10725. position_window(createW%,0,0,0,0,0,0):
  10726. set_caret(createW%,4)
  10727. init_drag(mainW%,ic%,5):dragbutt%=64
  10728. remove_field(Field%,con%,
  10729.  Calc$)
  10730.  con% 
  10731. confirm(
  10732. msg("Err53"))=
  10733. )!block%=mainW%:block%!4=desc%(Field%)
  10734.  "Wimp_GetIconState",,block%
  10735. "posx%=block%!8:posy%=block%!12
  10736.  "Wimp_DeleteIcon",,block%
  10737. 8block%!4=field%(Field%):
  10738.  "Wimp_DeleteIcon",,block%
  10739. fields%-=1
  10740. Calc$=calc$(Field%)
  10741.  F%=Field% 
  10742.  fields%
  10743.   desc%(F%)=desc%(F%+1):field%(F%)=field%(F%+1):Tag$(F%)=Tag$(F%+1):len%(F%)=len%(F%+1):chartype%(F%)=chartype%(F%+1):fix%(F%)=fix%(F%+1):calc$(F%)=calc$(F%+1)
  10744. !block%=mainW%
  10745.  "Wimp_GetWindowState",,block%
  10746. ;posx%-=block%!20-block%!4:posy%-=block%!24-block%!16-48
  10747.  "Wimp_ForceRedraw",-1,block%!4,block%!8,block%!12,block%!16
  10748. create_field(Before%,x%,y%,Calc$)
  10749.  Desc%,Field%,F%,tag$,Len%,Char%,F%,L%,LF%,x%,y%,width%,height%,dflg%
  10750.  fields%=MaxFields% 
  10751. softerror(
  10752. (MaxFields%),23):
  10753.  $DescText%="" 
  10754.  $TagText%="" 
  10755.  fieldtype%<=8 
  10756. ($DescText%):LF%=
  10757. ($LenText%)
  10758.  L%=0 
  10759.  dflg%=(winback%<<28)+&7016711 
  10760.  dflg%=(winback%<<28)+&7016731
  10761.  LF%>246 
  10762. softerror("",64):
  10763. ($boxX%):y%=
  10764. ($boxY%):width%=
  10765. ($boxW%):height%=
  10766. ($boxH%)
  10767.  fieldtype% 
  10768.  39,40,59:
  10769.   LF%=0
  10770.  width%=0 
  10771.  width%=48
  10772.  height%=0 
  10773.  height%=48
  10774.  41,42,43,44,45:LF%=1
  10775.  8,48,50:LF%=8
  10776.  49:LF%=15
  10777.  51:LF%=10
  10778.  52,58:LF%=24
  10779.  53,55:LF%=3
  10780.  54,56:LF%=2
  10781.  57:LF%=4
  10782.  LF%>0 
  10783.  $TagText%="" 
  10784. softerror("",16):
  10785.  F%+=1
  10786.  $TagText%=Tag$(F%) 
  10787.  F%>fields%
  10788.  F%<=fields% 
  10789.  $TagText%<>"" 
  10790. softerror("",20):
  10791. 8fields%+=1:Tag$(fields%)=$TagText%:len%(fields%)=LF%
  10792.  width%=0 
  10793.  $TagText%<>"" 
  10794.  len%(fields%)<70 
  10795.  width%=len%(fields%)*16+16 
  10796.  width%=70*16+16
  10797.  height%=0 
  10798.  width%>0 
  10799.  height%=48
  10800. !chartype%(fields%)=fieldtype%
  10801. selected(createW%,14) 
  10802.  fix%(fields%)=
  10803. ($Fixpt%) 
  10804.  fix%(fields%)=0
  10805. extend_named_sliding_block(formanchor%,Fptr%-!formanchor%+L%+6)
  10806. [desc%(fields%)=
  10807. create_icon(mainW%,x%-L%*16-16,y%+2,L%*16+8,44,dflg%,"",Fptr%,hand%,L%)
  10808. !$Fptr%=$DescText%:Fptr%+=L%+1
  10809. $Fptr%=""
  10810.  fieldtype% 
  10811.   min$=$
  10812. text(createW%,15)
  10813.   max$=$
  10814. text(createW%,25)
  10815.  min$<>"" 
  10816.  max$<>"" 
  10817.  calc$(fields%)=min$+"|"+max$:calc$(0)="LOADED"
  10818. 3  min$=$
  10819. text(createW%,15):
  10820.  min$="" 
  10821.  min$="0"
  10822. 4  calc$(fields%)=min$+"|"+min$:calc$(0)="LOADED"
  10823.  fieldtype% 
  10824.  0,1,2,3,4,5,6,7,8,39,40,46,47,48,49,50,51,52,53,54,55,56,57,58:valptr%=hand%
  10825.  59:valptr%=!logoanchor%:$Fptr%=Tag$(fields%)
  10826. :valptr%=hvalid%(fieldtype%)
  10827. icon_design(fieldtype%,1,width%,height%)
  10828. Xfield%(fields%)=
  10829. create_icon(mainW%,x%,y%,width%,height%,iflags%,"",Fptr%,valptr%,4)
  10830.  fieldtype%=40 
  10831.  Rf%(fields%)=
  10832. create_anchor("Picture"+
  10833. (fields%))
  10834. Fptr%+=5
  10835. redraw_icon(mainW%,desc%(fields%)):
  10836. redraw_icon(mainW%,field%(fields%))
  10837.  Before%<fields% 
  10838.  Before%>0 
  10839. re_sequence(fields%,Before%,-1)
  10840. adjust_field(b%)
  10841.  Dptr%,Fptr%,dflg%
  10842.  "Wimp_GetPointerInfo",,block%
  10843.  newx%=!block%:newy%=block%!4
  10844. #Fieldnumber%=
  10845. get_field(ficon%)
  10846.  (ficon% 
  10847.  2)=0 
  10848. C  !block%=mainW%:block%!4=ficon%:
  10849.  "Wimp_GetIconState",,block%
  10850. .  Dptr%=block%!28:Desc$=$Dptr%:L%=
  10851. (Desc$)
  10852.  L%=0 
  10853.  dflg%=(winback%<<28)+&7016711 
  10854.  dflg%=(winback%<<28)+&7016731
  10855.  "Wimp_DeleteIcon",,block%
  10856.  "Wimp_GetWindowState",,block%
  10857. -  x%=block%!20-block%!4+newx%-oldx%+minx%
  10858. .  y%=block%!24-block%!16+miny%+newy%-oldy%
  10859. W  desc%(Fieldnumber%)=
  10860. create_icon(mainW%,x%,y%,L%*16+8,44,dflg%,"",Dptr%,hand%,L%)
  10861.   C  !block%=mainW%:block%!4=ficon%:
  10862.  "Wimp_GetIconState",,block%
  10863.   Fptr%=block%!28
  10864.  $$    
  10865.  "Wimp_DeleteIcon",,block%
  10866.  %(    
  10867.  "Wimp_GetWindowState",,block%
  10868.  &#    x%=block%!20-block%!4+minx%
  10869.  '0    y%=block%!24-block%!16+miny%+newy%-oldy%
  10870.  (F    width%=maxx%-minx%+newx%-oldx%:height%=maxy%-miny%+oldy%-newy%
  10871.  *'    keepwith%=
  10872. selected(prefsW%,16)
  10873.  keepwith% 
  10874.  ,I      !block%=mainW%:block%!4=ficon%-1:
  10875.  "Wimp_GetIconState",,block%
  10876.  -2      Dptr%=block%!28:Desc$=$Dptr%:L%=
  10877. (Desc$)
  10878.  .P      
  10879.  L%=0 
  10880.  dflg%=(winback%<<28)+&7016711 
  10881.  dflg%=(winback%<<28)+&7016731
  10882.  /&      
  10883.  "Wimp_DeleteIcon",,block%
  10884.  0        
  10885.  1C    !block%=mainW%:block%!4=ficon%:
  10886.  "Wimp_DeleteIcon",,block%
  10887.  keepwith% 
  10888.  3*      
  10889.  "Wimp_GetWindowState",,block%
  10890.  4:      x%=block%!20-block%!4+newx%-oldx%+minx%-L%*16-16
  10891.  52      y%=block%!24-block%!16+miny%+newy%-oldy%
  10892.  6]      desc%(Fieldnumber%)=
  10893. create_icon(mainW%,x%,y%+2,L%*16+8,44,dflg%,"",Dptr%,hand%,L%)
  10894.  7        
  10895.  8(    
  10896.  "Wimp_GetWindowState",,block%
  10897.  9/    x%=block%!20-block%!4+newx%-oldx%+minx%
  10898.  :0    y%=block%!24-block%!16+miny%+newy%-oldy%
  10899.  ;.    width%=maxx%-minx%:height%=maxy%-miny%
  10900.  =(  fieldtype%=chartype%(Fieldnumber%)
  10901.  fieldtype% 
  10902.  ?V    
  10903.  0,1,2,3,4,5,6,7,8,39,40,46,47,48,49,50,51,52,53,54,55,56,57,58:valptr%=hand%
  10904.  @<    
  10905.  59:valptr%=!logoanchor%::$Fptr%=Tag$(Fieldnumber%)
  10906.  A%    
  10907. :valptr%=hvalid%(fieldtype%)
  10908.  C/  
  10909. icon_design(fieldtype%,1,width%,height%)
  10910.  D_  field%(Fieldnumber%)=
  10911. create_icon(mainW%,x%,y%,width%,height%,iflags%,"",Fptr%,valptr%,4)
  10912.  ES  
  10913.  fieldtype%=40 
  10914.  Rf%(Fieldnumber%)=
  10915. create_anchor("Picture"+
  10916. (Fieldnumber%))
  10917.  G@$boxX%=
  10918. (x%):$boxY%=
  10919. (y%):$boxW%=
  10920. (width%):$boxH%=
  10921. (height%)
  10922. !block%=mainW%
  10923.  "Wimp_GetWindowState",,block%
  10924.  "Wimp_ForceRedraw",-1,block%!4,block%!8,block%!12,block%!16
  10925. swap_fields(F1%,F2%)
  10926.  F2%>0 
  10927.  F2%<=fields% 
  10928.  desc%(F1%),desc%(F2%)
  10929.  Tag$(F1%),Tag$(F2%)
  10930.  Q   
  10931.  field%(F1%),field%(F2%)
  10932.  len%(F1%),len%(F2%)
  10933.  S&  
  10934.  chartype%(F1%),chartype%(F2%)
  10935.  fix%(F1%),fix%(F2%)
  10936.  calc$(F1%),calc$(F2%)
  10937. close_window(createW%)
  10938. re_sequence(F1%,F2%,Z%)
  10939.  [jD%=desc%(F1%):T$=Tag$(F1%):F%=field%(F1%):L%=len%(F1%):C%=chartype%(F1%):f%=fix%(F1%):Calc$=calc$(F1%)
  10940.  I%=F1%+Z% 
  10941.  F2% 
  10942.   desc%(I%-Z%)=desc%(I%):Tag$(I%-Z%)=Tag$(I%):field%(I%-Z%)=field%(I%):len%(I%-Z%)=len%(I%):chartype%(I%-Z%)=chartype%(I%):fix%(I%-Z%)=fix%(I%):calc$(I%-Z%)=calc$(I%)
  10943.  _jdesc%(F2%)=D%:Tag$(F2%)=T$:field%(F2%)=F%:len%(F2%)=L%:chartype%(F2%)=C%:fix%(F2%)=f%:calc$(F2%)=Calc$
  10944. icon_design(char%,func%,
  10945.  func% 
  10946.  dc  
  10947.  0:bfg%=&1700353F:rbfg%=&1700253F:ffg%=&0700A535:
  10948.  logosloaded% 
  10949.  lfg%=&0000611A 
  10950.  lfg%=ffg%
  10951.  e^  
  10952.  1:bfg%=&1700653F:rbfg%=bfg%:ffg%=&07006535:
  10953.  logosloaded% 
  10954.  lfg%=&0000611E 
  10955.  lfg%=ffg%
  10956.  char% 
  10957.  hC  
  10958.  9,10,11,12,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:
  10959.  iF  !block%=keypadW%:block%!4=char%-9:
  10960.  "Wimp_GetIconState",,block%
  10961.  j?  w%=block%!16-block%!8:h%=block%!20-block%!12:iflags%=bfg%
  10962.  13,14:
  10963.  lF  !block%=keypadW%:block%!4=char%-9:
  10964.  "Wimp_GetIconState",,block%
  10965.  m@  w%=block%!16-block%!8:h%=block%!20-block%!12:iflags%=rbfg%
  10966.  n(  
  10967.  31:w%=48:h%=48:iflags%=&1700B53B
  10968.  o'  
  10969.  32,34:w%=112:h%=52:iflags%=bfg%
  10970.  pH  
  10971.  33:w%=44:h%=44:
  10972.  func%=0 
  10973.  iflags%=&1700353B 
  10974.  iflags%=&1700653B
  10975.  q#  
  10976.  35:w%=80:h%=80:iflags%=bfg%
  10977.  r)  
  10978.  36,37,38:w%=48:h%=48:iflags%=bfg%
  10979.  39:iflags%=ffg%
  10980.  t7  
  10981.  func%=0 
  10982.  iflags%=&0700A53E 
  10983.  iflags%=ffg%
  10984.  u4  
  10985.  41,42,43,44,45:w%=52:h%=52:iflags%=&1700B53B
  10986.  59:iflags%=lfg%
  10987. :iflags%=ffg%
  10988.  w%=0 
  10989.  h%=0 
  10990.  iflags%=&00000000
  10991. get_field(ic%)
  10992.  F%+=1
  10993.  field%(F%)=ic% 
  10994.  desc%(F%)=ic%
  10995. adjust_on(on%)
  10996. design%=on%:adjust%=on%
  10997. lit(menu%(9),5,on%)
  10998. lit(menu%(9),1,
  10999.  on%)
  11000. lit(menu%(9),2,
  11001.  on%)
  11002. lit(menu%(9),3,
  11003.  on%)
  11004. lit(menu%(9),4,
  11005.  on%)
  11006. icon_bit(22,createW%,6,
  11007.  on%)
  11008.  on% 
  11009. *  w%=ScreenWidth%*2:h%=ScreenHeight%*2
  11010. 4  !block%=0:block%!4=-h%:block%!8=w%:block%!12=0
  11011.  "Wimp_SetExtent",mainW%,block%
  11012. change_length(NL%,msg%)
  11013.  EX%,klm%,S$,N%
  11014. EX%=NL%-RA%
  11015.  EX%=0 
  11016. *dbasehandle%=
  11017. ($database%+".Database")
  11018. readsmarray(dbasehandle%,RA%)
  11019.  msg%:
  11020. extend_dbase
  11021.  (EX%>0):
  11022. confirm("Extend file from "+
  11023. (RA%)+" to "+
  11024. (NL%)+" records")=
  11025. extend_dbase
  11026.  (EX%<0):
  11027. confirm("Shorten file from "+
  11028. (RA%)+" to "+
  11029. (NL%)+" records")=
  11030. shorten_dbase
  11031. $Records%=
  11032. (RA%):N%=RA%
  11033. writesmarray(dbasehandle%,N%)
  11034. close_file(dbasehandle%)
  11035.  msg% 
  11036.  addr=
  11037. moveto(key%,top,1)
  11038. extend_dbase
  11039.  end%,P%,I%,key%,keybase%,KLM%,S$
  11040.  key%=0 
  11041.  Keys%
  11042.   S$=
  11043. KL%(key%),".")
  11044.   KLM%=KL%(key%)+13
  11045.   P%=LH%+48+(NL%+1)*KLM%
  11046. extend_named_sliding_block(keyanchor%(key%),P%)
  11047.    keybase%=!keyanchor%(key%)
  11048.   P%=LH%+48+RA%*KLM%
  11049.  I%=RA% 
  11050.  EX%+RA%-1
  11051.     !(keybase%+P%)=P%+KLM%
  11052.     !(keybase%+P%+4)=0
  11053.     $(keybase%+P%+8)=S$
  11054. %    !(keybase%+P%+KL%(key%)+9)=I%
  11055.     P%+=KLM%
  11056.   !(keybase%+P%)=0
  11057.   !(keybase%+P%+4)=0
  11058.   $(keybase%+P%+8)=S$
  11059. "  !(keybase%+P%+KL%(key%)+9)=0
  11060.  key%
  11061. end%=(RA%+1)*Length%
  11062.  I%=0 
  11063.  EX%-1
  11064. #dbasehandle%=end%+I%*Length%
  11065.  J%=1 
  11066.  fields%
  11067. #dbasehandle%,""
  11068. RA%=NL%
  11069. #dbasehandle%=(RA%+1)*Length%
  11070. shorten_dbase
  11071.  P%,L%,R%,s$,key%,keybase%,S$
  11072.  key%=0 
  11073.  Keys%
  11074.   S$=
  11075. KL%(key%),".")
  11076.   KLM%=KL%(key%)+13
  11077.    keybase%=!keyanchor%(key%)
  11078. $  s$=$(keybase%+LH%+56+NL%*KLM%)
  11079.  s$<>S$ 
  11080. confirm(
  11081. msg("Err52"))=
  11082.   P%=LH%+48+NL%*KLM%
  11083.   !(keybase%+P%)=0
  11084.   !(keybase%+P%+4)=0
  11085.   $(keybase%+P%+8)=S$
  11086. "  !(keybase%+P%+KL%(key%)+9)=0
  11087.  key%
  11088. RA%=NL%
  11089. #dbasehandle%=(RA%+1)*Length%
  11090. copy_database_spritefile(path$,leaf$)
  11091.  sprites%
  11092. create_named_sliding_block(sprsanchor%,1024)
  11093.  ### This is a temporary sprite area used simply to hold ###
  11094.  ### the sprite 'new_appl' whilst it is renamed and saved ###
  11095. sprites%=!sprsanchor%
  11096. !sprites%=1024
  11097. sprites%!8=16
  11098.  ### Initialise sprite area ###
  11099.  "OS_SpriteOp",&109,sprites%
  11100.  ### Load !Sprites file from Resources ###
  11101.  "OS_SpriteOp",&10A,sprites%,"<PBase$Dir>.Resources.Temp.!Sprites"
  11102.  ### Rename sprite 'new_appl' to new database name ###
  11103.  "OS_SpriteOp",&11A,sprites%,"new_appl",leaf$
  11104.  ### Save spritefile (with renamed new_appl) as !Sprites ###
  11105.  "OS_SpriteOp",&10C,sprites%,path$+".!Sprites"
  11106.  ### Do same for hi-res sprite ###
  11107.  "OS_SpriteOp",&109,sprites%
  11108.  "OS_SpriteOp",&10A,sprites%,"<PBase$Dir>.Resources.Temp.!Sprites22"
  11109.  "OS_SpriteOp",&11A,sprites%,"new_appl",leaf$
  11110.  "OS_SpriteOp",&10C,sprites%,path$+".!Sprites22"
  11111. scrap_sliding_block(sprsanchor%)
  11112. defaults(f$,N%,key%)
  11113. $Records%=
  11114. make_empty_index(N%,key%,
  11115. save_recs(f$+".Database",N%)
  11116. %present%=7:
  11117. save_keys:
  11118. save_calcs
  11119. 'design%=
  11120. :present%=1:
  11121. get_it_in(f$)
  11122. lit(menu%(0),2,
  11123. default_key
  11124. first_field
  11125.  chartype%(F%) 
  11126.  3,6,46,47,54,56,57:KL%(0)=len%(F%)
  11127.  len%(F%)>3 
  11128.  KL%(0)=4 
  11129.  KL%(0)=len%(F%)
  11130. Index$(0)="PrimaryKey"
  11131. key%=0
  11132. KW%()=0:KF%()=0
  11133. 0KW%(0,0)=KL%(0)+(1<<16)+(F%<<24):KF%(0,0)=F%
  11134. set_keydata(key%)
  11135. new_tree(f%)
  11136.  REC%,I%,ptr%,file%,old$,chars%,pos%,word%,c$,p$,w$
  11137.  I%=0 
  11138.   W%=KW%(0,I%)
  11139.  W%>0 
  11140. $    chars%=W% 
  11141.  255:c$=
  11142. (chars%)
  11143. L    pos%=(W%>>8) 
  11144.  255:p$=
  11145. (pos%):
  11146.  pos%=0 
  11147.  p$="L" 
  11148.  pos%=25 
  11149.  p$="R"
  11150. (    word%=(W%>>16) 
  11151.  255:w$=
  11152. (word%)
  11153. 8    old$+=Tag$(KF%(0,I%))+" ("+w$+","+p$+","+c$+"),"
  11154. old$=
  11155. old$)
  11156. selected(keyW%,33):s%=
  11157. selected(keyW%,32)
  11158.  f%=0
  11159. M$="Build index with "
  11160.  M$+="records in same subfiles" 
  11161.  M$+="all records in subfile "+
  11162. M$+=" of current database"
  11163.  M$+=", also restoring 'deleted' records."
  11164.  M$+=" WARNING! Other indices will need rebuilding!"
  11165. confirm(M$)=
  11166. mark_files(0,RA%,
  11167.  d%,s%,f%)
  11168. copy_keydata(0)
  11169.  "OS_File",5,$database%+".Database" 
  11170.  ,,,,len%
  11171. RA%=(len% 
  11172.  Length%)-1
  11173. scrap_sliding_block(keyanchor%(0))
  11174. make_empty_index(RA%,0,
  11175. close_window(keyW%)
  11176. redraw(keypadW%)
  11177. ptr%=!tempanchor%
  11178. poll:
  11179.  "Hourglass_On"
  11180. !$*dbasehandle%=
  11181. ($database%+".Database")
  11182.  REC%=0 
  11183.  RA%-1
  11184.   file%=ptr%?REC%
  11185.  file%<>255 
  11186.     top=8*file%+LH%
  11187. !)'    
  11188. readsmarray(dbasehandle%,REC%)
  11189.     KEY$=
  11190. key2(0,1)
  11191.     K$=
  11192. stripspaces(KEY$)
  11193. !,"    
  11194.  K$<>"" 
  11195. insert(KEY$,0)
  11196. !.0  
  11197.  "Hourglass_Percentage",(REC%*100) 
  11198.  REC%
  11199. close_file(dbasehandle%)
  11200. !1"newtree%=
  11201. :design%=
  11202. :adjust%=
  11203. scrap_sliding_block(tempanchor%)
  11204. Index$(0)="PrimaryKey"
  11205.  "Hourglass_Off"
  11206. present%=7
  11207. write_log(-1,"Primary key structure altered. Was "+old$)
  11208.  "Wimp_CreateMenu",,-1
  11209. file%=0:
  11210. asterisk(
  11211. get_it_in($database%)
  11212. reformat(f$)
  11213.  I%,F,REC%,dfields%,DLength%,chdd,z%,blobs%,ex%
  11214.  DTag$(),F%(),F1%(),L%(),l$(),c$()
  11215. F$(0)=""
  11216.  "OS_File",5,f$+".Form" 
  11217.  z%<>1:
  11218. softerror("",19)
  11219. !C'  
  11220.  f$=$database%:
  11221. softerror("",36)
  11222. !E$  blobs%=
  11223. find_blobs($database%)
  11224. (f$+".Form")
  11225. #F,dfields%
  11226. !HX  
  11227.  DTag$(dfields%),F%(dfields%),F1%(fields%),L%(dfields%),l$(dfields%),c$(dfields%)
  11228.  I%=1 
  11229.  dfields%
  11230. !JF    
  11231. #F,Desc$,DTag$(I%),xd%,yd%,xf%,yf%,L%(I%),char%,extra%,extra%
  11232.     DLength%+=L%(I%)+1
  11233. !M      
  11234.   chdd=
  11235. (f$+".Database")
  11236. !O,  dbasehandle%=
  11237. ($database%+".Database")
  11238. compare
  11239.  "Hourglass_On"
  11240.  REC%=0 
  11241. #chdd=REC%*DLength%
  11242. !T'    
  11243. readsmarray(dbasehandle%,REC%)
  11244.  I%=1 
  11245.  dfields%
  11246.       S$=F$(F%(I%))
  11247. !W)      
  11248. (S$)>L%(I%) 
  11249. S$,L%(I%))
  11250.       
  11251. #chdd,S$
  11252.     ex%=-1
  11253.  ex%<blobs%
  11254.       ex%+=1:F%=Ext%(ex%)
  11255. !]F      
  11256. copy_blob($database%,f$,REC%,REC%,F%,F1%(F%),chartype%(F%))
  11257. !^        
  11258. !_2    
  11259.  "Hourglass_Percentage",(REC%*100) 
  11260.  REC%
  11261.  "Hourglass_Off"
  11262. close_file(chdd)
  11263. close_file(dbasehandle%)
  11264. !d)  
  11265.  "OS_File",18,f$+".Database",&7f2
  11266.  object$
  11267. !hO    
  11268.  "XOS_CLI","Copy "+$database%+"."+object$+" "+f$+"."+object$+" ~CF~V"
  11269.  object$="***"
  11270. !j5  
  11271.  !Run,Colours,Indices,Log,PrimaryKey,PrintJobs
  11272. !kU  
  11273.  PrintRes,Special,STemplate,Subfiles,UserFuncs,UsrSprites,ValTables,Winpos,***
  11274.  link$(0)="LOADED" 
  11275.     lk=
  11276. (f$+".Link")
  11277.  F%=1 
  11278.  dfields%
  11279.       
  11280. #lk,l$(F%)
  11281. close_file(lk)
  11282.  calc$(0)="LOADED" 
  11283.     cl=
  11284. (f$+".Calc")
  11285.  F%=1 
  11286.  dfields%
  11287.       
  11288. #cl,c$(F%)
  11289. close_file(cl)
  11290. close_window(reformW%)
  11291. reform$="":
  11292. asterisk(
  11293. write_log(-1,"Record structure changed")
  11294. compare
  11295.  source%,dest%
  11296.  dest%=1 
  11297.  dfields%
  11298.   source%=fields%+1
  11299.     source%-=1
  11300.  source%=0 
  11301.  Tag$(source%)=DTag$(dest%)
  11302. *  F%(dest%)=source%:F1%(source%)=dest%
  11303.  source%>0 
  11304.      l$(dest%)=link$(source%)
  11305.      c$(dest%)=calc$(source%)
  11306.  dest%
  11307. merge_files(f$,fi%)
  11308.  R%,REC%,ptr%,file%,d%,s%,z%,RUM%,RAM%,NL%,ex%,blobs%
  11309.  "OS_File",5,f$+".Database" 
  11310.  z%<>1:
  11311. softerror("",29)
  11312.  f$=$database%:
  11313. softerror("",15)
  11314. identical:
  11315. softerror("",21)
  11316. 7  s%=
  11317. selected(reformW%,2):d%=
  11318. selected(reformW%,3)
  11319.  fi%=0
  11320.   M$="Merge "+f$+" with "
  11321.  M$+="corresponding subfiles" 
  11322.  M$+="subfile "+
  11323. (fi%)
  11324.    M$+=" of current database"
  11325.  M$+=", also restoring deleted records"
  11326.  M$+=". WARNING! Indices will need rebuilding!"
  11327. confirm(M$)=
  11328. 0    
  11329.  "OS_File",5,f$+".Database" 
  11330.  ,,,,len%
  11331.     RAM%=(len% 
  11332.  Length%)-1
  11333. I    
  11334.  ### Load primary key of file to be merged into a spare slot ###
  11335. 2    
  11336. open_index(f$+".PrimaryKey",MaxKeys%+1,
  11337. @    
  11338.  ### Mark which subfile each new record is to go in ###
  11339. 0    
  11340. mark_files(MaxKeys%+1,RAM%,
  11341.  d%,s%,fi%)
  11342. (    keybase%=!keyanchor%(MaxKeys%+1)
  11343. F    
  11344.  ### Count how many record actually used in file to merge ###
  11345. -    
  11346. count(MaxKeys%+1,RUM%):
  11347. count(0,RU%)
  11348.     NL%=RU%+RUM%
  11349.  "Hourglass_On"
  11350. O    
  11351.  ### Expand existing file if new length (NL%) exceeds availability ###
  11352. )    
  11353.  NL%>RA% 
  11354. change_length(NL%,
  11355. &    blobs%=
  11356. find_blobs($database%)
  11357.     ptr%=!tempanchor%
  11358.  R%=0 
  11359.  RAM%-1
  11360.       file%=ptr%?R%
  11361.       
  11362.  file%<>255 
  11363.         
  11364. make_new_rec
  11365.         top=8*file%+LH%
  11366. "        
  11367. read(fields%,
  11368. ,R%,f$)
  11369. 8        
  11370. selected(reformW%,8) 
  11371.  dontincrement%=
  11372.          
  11373. write(fields%,key%)
  11374.         ex%=-1
  11375.         
  11376.  ex%<blobs%
  11377. !          ex%+=1:F%=Ext%(ex%)
  11378. C          
  11379. copy_blob(f$,$database%,R%,REC%,F%,F%,chartype%(F%))
  11380.         
  11381. 5        
  11382.  "Hourglass_Percentage",(R%*100) 
  11383.  RUM%
  11384.       
  11385.  "Hourglass_Off"
  11386. close_window(reformW%)
  11387. )    
  11388. scrap_sliding_block(tempanchor%)
  11389. 4    
  11390. scrap_sliding_block(keyanchor%(MaxKeys%+1))
  11391. !    file%=fi%:top=8*file%+LH%
  11392.      addr=
  11393. moveto(key%,top,1)
  11394. reform$="":
  11395. asterisk(
  11396. write_log(-1,"Records merged from "+f$)
  11397. identical
  11398.  I%,F,dfields%,different%
  11399. (f$+".Form")
  11400. #F,dfields%
  11401.  dfields%<>fields% 
  11402.  different%=
  11403.  I%<fields% 
  11404.  different%
  11405.   I%+=1
  11406. #F,Desc$,Tag$,xd%,yd%,xf%,yf%,len%,char%,extra%,extra%
  11407.  len%<>len%(I%) 
  11408.  different%=
  11409.  char%<>chartype%(I%) 
  11410.  (char%>8 
  11411.  chartype%(I%)>8) 
  11412.  different%=
  11413.  different%
  11414. mark_files(key%,RA%,d%,s%,f%)
  11415.  P%,I%,M,file%,top,ptr%
  11416. create_named_sliding_block(tempanchor%,RA%+1)
  11417.  "Hourglass_On"
  11418. ptr%=!tempanchor%
  11419.  I%=0 
  11420.  RA%-1
  11421.   ptr%?I%=d%
  11422.  file%=0 
  11423.     top=8*file%+LH%
  11424. !    P%=
  11425. neighbour(key%,top,1)
  11426.  P%<>top
  11427.        S%=
  11428. rec_no(k$,key%,P%)
  11429. +      
  11430.  ptr%?S%=file% 
  11431.  ptr%?S%=f%
  11432. "      P%=
  11433. neighbour(key%,P%,1)
  11434.         
  11435.  file%
  11436.  "Hourglass_Off"
  11437. print_tree(key%,file%,PR$)
  11438.  L%(),COL%,levels%,depth%
  11439. YTextName$=$database%+".PrintJobs.Tree"+
  11440. Index$(key%),5)+
  11441. (file%):$SaveName%=TextName$
  11442. read_print_options
  11443. reportdest$="Window"
  11444. keybase%=!keyanchor%(key%)
  11445. P%=!(keybase%+top)
  11446.  "Hourglass_On"
  11447. traverse(P%,
  11448. levels%=depth%-2:COL%=0
  11449.  L%(levels%)
  11450. tree_heading
  11451. P%=!(keybase%+top)
  11452. traverse(P%,
  11453. H$=" No. nodes     1"
  11454. H1$=" Max nodes     1"
  11455.  L%=1 
  11456.  levels%
  11457.  L%<40 
  11458.     L$=
  11459. (L%(L%))
  11460.     L$=
  11461. (L$)," ")+L$
  11462.     M$=
  11463. (2^L%)
  11464. 0    
  11465. (M$)>5 
  11466.  M$=BL$ 
  11467. (M$)," ")+M$
  11468.     H$+=L$:H1$+=M$
  11469. rule_off(45)
  11470. :$(!lineanchor%)=H$:
  11471. list_line(-1,lineanchor%,
  11472. (H$),32)
  11473. "    <$(!lineanchor%)=H1$:
  11474. list_line(-1,lineanchor%,
  11475. (H1$),32)
  11476. <$(!lineanchor%)=LH$:
  11477. list_line(-1,lineanchor%,
  11478. (LH$),32)
  11479. rule_off(45)
  11480.  "Hourglass_Off"
  11481. format$="tree":tkey%=key%
  11482. screen_list
  11483. pitch$=
  11484. pitch("2")
  11485. lit(menu%(18),1,
  11486. write_log(-1,"Tree printed: subfile:"+
  11487. (file%)+", key:"+
  11488. (key%)+", "+Index$(key%))
  11489. tree_heading
  11490.  zero%,len%
  11491. 6," ")
  11492. LH$=" Level No.  Root"
  11493.  L%=1 
  11494.  levels%
  11495.   L$=
  11496.  L%<10 
  11497.  L$="0"+L$
  11498.  L%<40 
  11499.     LH$+="    "+L$
  11500.     len%=
  11501. (LH$)
  11502. U$=" "+
  11503. len%-1,"-")
  11504. LenLine%=len%+4
  11505. Count%=0
  11506. "#"count%=
  11507. count_recs(key%,zero%)
  11508. "$Dtextblocksize%=(count%+11)*LenLine%:textblockinc%=textblocksize%
  11509. extend_named_sliding_block(textanchor%,textblocksize%)
  11510. extend_named_sliding_block(lineanchor%,LenLine%+4)
  11511. TextPtr%=!textanchor%
  11512. recblocksize%=400
  11513. extend_named_sliding_block(recanchor%,recblocksize%)
  11514. rule_off(32)
  11515. rule_off(45)
  11516. send_title("Tree Analysis (subfile:"+
  11517. (file%)+", key:"+
  11518. (key%)+", "+Index$(key%)+")")
  11519. rule_off(32)
  11520. ".<$(!lineanchor%)=LH$:
  11521. list_line(-1,lineanchor%,
  11522. (LH$),32)
  11523. rule_off(45)
  11524. traverse(P%,Z%)
  11525.  string$
  11526. COL%=COL%+1
  11527.  COL%>depth% 
  11528.  depth%=COL%
  11529.  P%<0 
  11530. L%=!(keybase%+P%)
  11531. R%=!(keybase%+P%+4)
  11532. S$=$(keybase%+P%+8)
  11533.  S$="" 
  11534.  S$="<null>"
  11535. S$)="#"
  11536.   S$=
  11537. ">%rec%=!(keybase%+P%+8+KL%(key%)+1)
  11538.   L%(COL%-1)=L%(COL%-1)+1
  11539.  PR$="ALL" 
  11540.  COL%<=40 
  11541. "C*      string$=
  11542. COL%*6+10-
  11543. (S$)," ")+S$
  11544. "DL      $(!lineanchor%)=string$:
  11545. list_line(rec%,lineanchor%,
  11546. (string$),32)
  11547.       
  11548. "F1      string$=" "+S$+" (level "+
  11549. (COL%-1)+")"
  11550. "GL      $(!lineanchor%)=string$:
  11551. list_line(rec%,lineanchor%,
  11552. (string$),32)
  11553. "H        
  11554. traverse(L%,Z%)
  11555. COL%=COL%-1
  11556. L%=!(keybase%+P%)
  11557. R%=!(keybase%+P%+4)
  11558. S$=$(keybase%+P%+8)
  11559. "P%rec%=!(keybase%+P%+8+KL%(key%)+1)
  11560. traverse(R%,Z%)
  11561. COL%=COL%-1
  11562. balance(key%)
  11563.  recptr%,top,file%,flagptr%,balptr%,I%,N%,A%,max%,done%,highest%,avail%,seglen%
  11564.  recs%(),ptr%()
  11565.  recs%(5),ptr%(5)
  11566. newtree%=
  11567. seglen%=KL%(key%)+5
  11568. extend_named_sliding_block(recanchor%,seglen%*RA%)
  11569. create_named_sliding_block(balanchor%,seglen%*RA%)
  11570. create_named_sliding_block(flaganchor%,RA%)
  11571. "^Arecptr%=!recanchor%:flagptr%=!flaganchor%:balptr%=!balanchor%
  11572.  I%=0 
  11573.  RA%-1
  11574.   flagptr%?I%=255
  11575.  Bytes are changed from 255 to 0 where records are in use
  11576.  "Hourglass_On"
  11577.  file%=0 
  11578.   ptr%(file%)=recptr%
  11579.   top=8*file%+LH%
  11580. "g.  recs%(file%)=
  11581. count_recs(key%,recptr%)-1
  11582.   max%+=recs%(file%)+1
  11583.  file%
  11584. make_empty_index(RA%,key%,
  11585.  "Hourglass_LEDs",%11
  11586.  file%=0 
  11587.   top=8*file%+LH%
  11588.  recs%(file%)>=0 
  11589.     recptr%=ptr%(file%)
  11590.     N%=1
  11591. "q        
  11592.       N%=N%+N%
  11593.  N%>recs%(file%)+2
  11594.     step%=N%
  11595.     N%=(N% 
  11596.  2)-1
  11597.     start%=N%
  11598.     C%=0
  11599. "x        
  11600.       start%=start% 
  11601.       end%=N%-start%-1
  11602.       step%=step% 
  11603. "|$      
  11604.  I%=start% 
  11605.  end% 
  11606.  step%
  11607. "}9        A%=recptr%+seglen%*(I%*(recs%(file%)+1) 
  11608. "~=        balptr%!C%=!A%:$(balptr%+C%+4)=$(A%+4):!A%=-!A%-1
  11609.         C%+=seglen%
  11610.       
  11611.  step%=2
  11612. %    
  11613.  I%=0 
  11614.  C%-seglen% 
  11615.  seglen%
  11616. .      REC%=balptr%!I%:KEY$=$(balptr%+I%+4)
  11617.       
  11618. insert(KEY$,key%)
  11619.       done%+=1
  11620. 6      
  11621.  "Hourglass_Percentage",(done%*100) 
  11622.  max%
  11623.  I%=0 
  11624.  recs%(file%)
  11625. #      REC%=recptr%!(seglen%*I%)
  11626.       
  11627.  REC%>=0 
  11628. (        KEY$=$(recptr%+seglen%*I%+4)
  11629.         
  11630. insert(KEY$,key%)
  11631.         done%+=1
  11632. 8        
  11633.  "Hourglass_Percentage",(done%*100) 
  11634.  max%
  11635.       
  11636.  file%
  11637.  "Hourglass_LEDs",%00
  11638. keybase%=!keyanchor%(key%)
  11639. nodesize%=8+KL%(key%)+1+4
  11640. avail%=!keybase%
  11641.  I%=0 
  11642.  highest%
  11643.  flagptr%?I%=255 
  11644. +    !(keybase%+avail%+8+KL%(key%)+1)=I%
  11645.     avail%+=nodesize%
  11646.  "Hourglass_Off"
  11647. scrap_sliding_block(balanchor%)
  11648. scrap_sliding_block(recanchor%)
  11649. scrap_sliding_block(flaganchor%)
  11650. save_keys
  11651. newtree%=
  11652. asterisk(
  11653. write_log(-1,"Index "+Index$(key%)+" balanced")
  11654. duplicates(key%)
  11655.  P$,S$,RP$,RS$,addr,top,RP%,RS%,count%,examined%,file%
  11656. abort_dup:
  11657. YTextName$=$database%+".PrintJobs.Dupl"+
  11658. Index$(key%),5)+
  11659. (file%):$SaveName%=TextName$
  11660. read_print_options
  11661. Breportdest$="Window":format$="dup":Count%=0:LenLine%=KL%(0)+23
  11662. <textblocksize%=100*LenLine%:textblockinc%=textblocksize%
  11663. extend_named_sliding_block(textanchor%,textblocksize%)
  11664. extend_named_sliding_block(lineanchor%,LenLine%+4)
  11665. TextPtr%=!textanchor%
  11666. recblocksize%=400
  11667. extend_named_sliding_block(recanchor%,recblocksize%)
  11668. rule_off(32)
  11669. Yline$=" Duplicated keys":$(!lineanchor%)=line$:
  11670. list_line(-1,lineanchor%,
  11671. (line$),32)
  11672.  "Hourglass_On"
  11673.  file%=0 
  11674. rule_off(45)
  11675. ]  line$=" "+$Subfile%(file%):$(!lineanchor%)=line$:
  11676. list_line(-1,lineanchor%,
  11677. (line$),32)
  11678. rule_off(32)
  11679.   top=8*file%+LH%
  11680. !  addr=
  11681. neighbour(key%,top,1)
  11682. 0  count%=
  11683. count_recs(key%,zero%):examined%=0
  11684.  addr<>top
  11685.  "OS_Byte",229,0
  11686. P    S$=$(!keyanchor%(key%)+addr+8):RS%=!(!keyanchor%(key%)+addr+9+KL%(key%))
  11687. =    RS$=
  11688. (RS%):RS$=" Record No."+
  11689. (RS$)," ")+RS$+"   "
  11690.  S$=P$ 
  11691.       line$=RP$+P$
  11692. G      $(!lineanchor%)=line$:
  11693. list_line(RP%,lineanchor%,
  11694. (line$),32)
  11695.       line$=RS$+S$
  11696. G      $(!lineanchor%)=line$:
  11697. list_line(RS%,lineanchor%,
  11698. (line$),32)
  11699.         
  11700.     P$=S$:RP%=RS%:RP$=RS$
  11701.     examined%+=1
  11702. 8    
  11703.  "Hourglass_Percentage",examined%*100 
  11704.  count%
  11705. $    addr=
  11706. neighbour(key%,addr,1)
  11707.  file%
  11708. rule_off(32)
  11709.  "Hourglass_Off"
  11710. screen_list
  11711. abort_dup
  11712.  "Hourglass_Off"
  11713. screen_list
  11714. softerror("",67)
  11715. wimp_error(
  11716.  >RAMtree
  11717.  Index handling ------------------------------------------------------
  11718. neighbour(key%,addr%,d%)
  11719.  R%,S%,p%,keybase%
  11720. keybase%=!keyanchor%(key%)
  11721. p%=d%*4
  11722. R%=!(keybase%+addr%+p%)
  11723.  R%<0 
  11724.  =-R%
  11725. p%=4-p%
  11726.   addr%=R%
  11727.   S%=!(keybase%+addr%+p%)
  11728.  S%>0 
  11729.  R%=S%
  11730.  S%<=0
  11731. rec_no(
  11732.  k$,key%,addr%)
  11733. #k$=$(!keyanchor%(key%)+addr%+8)
  11734. -=!(!keyanchor%(key%)+addr%+8+KL%(key%)+1)
  11735. scan_file(c$,key%,file%,action%)
  11736.  REC%,examined%,subtotal%,X%,Y%,n$,copy%,I%
  11737. n$="0123456789."
  11738. %subtotal%=
  11739. count_recs(key%,zero%)
  11740. (c$)=
  11741.  "OS_Byte",229,0
  11742.   REC%=
  11743. rec_no(k$,key%,P%)
  11744. readsmarray(dbasehandle%,REC%)
  11745.   examined%+=1
  11746. (Search$)=
  11747.  action% 
  11748.       
  11749. get_lengths
  11750.       
  11751.       
  11752.  format$="label" 
  11753. "        
  11754.  copy%=1 
  11755.  labcopies%
  11756. $          
  11757. print_record(REC%,P%)
  11758.         
  11759.  copy%
  11760. $        
  11761. print_record(REC%,P%)
  11762.       
  11763. /      
  11764.  2:ptr%?REC%=file%:
  11765.  ### earmark ###
  11766. ?      
  11767. write_csv_rec(REC%,Form$,csvhandle%):
  11768. poll:
  11769. 9      
  11770.  4:KEY$=
  11771. key2(newkey%,1):
  11772. insert(KEY$,newkey%)
  11773. #           
  11774.  ### create index ###
  11775.       
  11776.       S$=F$(Fieldnumber%)
  11777.       
  11778. C        
  11779. New$,$ws%)>0:S$=
  11780. wildcard_replace(S$,Old$,New$,$ws%)
  11781. C        
  11782. New$,$wc%)>0:S$=
  11783. wildcard_replace(S$,Old$,New$,$wc%)
  11784.         
  11785.  numeric%:
  11786.         X%=0:Y%=0
  11787.         
  11788.  X%+=1
  11789. )        
  11790. (S$) 
  11791. S$,X%,1))>0
  11792.         
  11793.  X%<=
  11794. (S$) 
  11795.           Y%=X%
  11796.           
  11797.  Y%+=1
  11798. +          
  11799. (S$) 
  11800. S$,Y%,1))=0
  11801.         
  11802. 9        S$=
  11803. S$,X%-1)+
  11804. S$,X%,Y%-X%)+New$))+
  11805. S$,Y%)
  11806. *        
  11807.  Old$<>"":
  11808.  S$=Old$ 
  11809.  S$=New$
  11810.         
  11811. :S$=New$
  11812.       
  11813.       
  11814. (S$)>TextLength% 
  11815.         
  11816. softerror("",10)
  11817.         
  11818.         F$(Fieldnumber%)=S$
  11819. # ,        
  11820. writesmarray(dbasehandle%,REC%)
  11821.       
  11822. #"!      
  11823.  ### global change ###
  11824.       
  11825.       
  11826.  I%=1 
  11827.  fields%
  11828.         $Rf%(I%)=F$(I%)
  11829.       
  11830. #'?      
  11831. update_calcs(0) 
  11832. writesmarray(dbasehandle%,REC%)
  11833. #(:      
  11834.  ### update time-dependent calcs on opening ###
  11835. #)        
  11836.   P%=
  11837. neighbour(key%,P%,1)
  11838. #,;  
  11839.  "Hourglass_Percentage",(examined%*100) 
  11840.  subtotal%
  11841. wildcard_replace(S$,Old$,New$,type$)
  11842.  old$,new$,old2$,new2$,c$,L%,P%,R%
  11843.  type$ 
  11844.  $ws%:
  11845. #6D    
  11846. Old$,1)=$ws% 
  11847. New$,1)=$ws% 
  11848. Old$)=$ws% 
  11849. New$)=$ws%:
  11850. #7'    old$=
  11851. Old$,2)):new$=
  11852. New$,2))
  11853.     P%=
  11854. S$,old$)
  11855. #92    
  11856.  P%>0 
  11857. S$,P%-1)+new$+
  11858. S$,P%+
  11859. (old$))
  11860. #:(    
  11861. Old$,1)=$ws% 
  11862. New$,1)=$ws%:
  11863. #;/    old$=
  11864. Old$,2):new$=
  11865. New$,2)::R%=
  11866. (old$)
  11867. #<.    
  11868. S$,R%)=old$ 
  11869. (S$)-R%)+new$
  11870. #=$    
  11871. Old$)=$ws% 
  11872. New$)=$ws%:
  11873. #>*    old$=
  11874. Old$):new$=
  11875. New$):L%=
  11876. (old$)
  11877. #?*    
  11878. S$,L%)=old$ 
  11879.  S$=new$+
  11880. S$,L%+1)
  11881. #@(    
  11882. Old$,$ws%)>0 
  11883. New$,$ws%)>0:
  11884. #AP    P%=
  11885. Old$,$ws%):old$=
  11886. Old$,P%-1):L%=
  11887. (old$):old2$=
  11888. Old$,P%+1):R%=
  11889. (old2$)
  11890. #B9    P%=
  11891. New$,$ws%):new$=
  11892. New$,P%-1):new2$=
  11893. New$,P%+1)
  11894. #C*    
  11895. S$,L%)=old$ 
  11896.  S$=new$+
  11897. S$,L%+1)
  11898. #D0    
  11899. S$,R%)=old2$ 
  11900. (S$)-R%)+new2$
  11901.  $wc%:
  11902. (Old$)=
  11903. (New$) 
  11904.  P%=1 
  11905. (Old$)
  11906.       c$=
  11907. Old$,P%,1)
  11908. #J;      
  11909.  c$<>$wc% 
  11910. S$,P%,1) 
  11911. S$,P%,1)=
  11912. New$,P%,1)
  11913. search(S$,key%,M%)
  11914.  P%,found%,info$,keybase%,rec%,cond$
  11915. keybase%=!keyanchor%(key%)
  11916. Z%=0:P%=top:ident%=
  11917.   L%=P%
  11918.   P%=!(keybase%+L%+Z%)
  11919.  P%<=0 
  11920.  P%=-L%:found%=
  11921.   info$=$(keybase%+P%+8)
  11922.   rec%=
  11923. rec_no(k$,key%,P%)
  11924. #Z1  
  11925. (val$+"(S$)="+val$+"LEFT$(info$,kl%)") 
  11926.       
  11927.  0:ident%=(key%=0)
  11928.       
  11929.  1,3:found%=
  11930. #^$      
  11931.  rec%=REC% 
  11932.  found%=
  11933. #_        
  11934. #a8  
  11935.  found% 
  11936.  Z%=-
  11937. (val$+"(S$)>="+val$+"(info$)")*4
  11938.  found%
  11939.  ### M%=0 - Find leaf position at which to insert ###
  11940.  ### M%=1 - Find first match in tree (if there is one) ###
  11941.  ### M%=2 - Find exact matching record, checking for record no. ###
  11942. insert(
  11943.  S$,key%)
  11944.  P%,avail%,kl%,keybase%,abort%
  11945.  S$="" 
  11946.  null%(key%)=
  11947. keybase%=!keyanchor%(key%)
  11948. #m"kl%=KL%(key%):val$=
  11949. type(key%)
  11950. search(S$,key%,0)
  11951.  ident% 
  11952. #q!    
  11953. selected(passW%,15):
  11954. #r"    
  11955. softerror(S$,37):abort%=
  11956. #tT    
  11957. selected(prefsW%,34) 
  11958. confirm(
  11959. msg("Err45")+" ("+S$+")") 
  11960.  abort%=
  11961.  abort% 
  11962.  S$="*Failed*":
  11963. nextfree%=!keybase%
  11964.  !(keybase%+nextfree%)<=0 
  11965.   incr%=
  11966. ($Increment%)
  11967.  incr%>0 
  11968. #|#    
  11969. change_length(RA%+incr%,
  11970.  S$="*Failed*"
  11971.  S$="*Failed*" 
  11972. softerror("",2):
  11973.  avail%=!(keybase%+nextfree%)
  11974. .!(keybase%+nextfree%+Z%)=!(keybase%+P%+Z%)
  11975. $!(keybase%+nextfree%+(4-Z%))=-P%
  11976. $(keybase%+nextfree%+8)=S$
  11977. ,!(keybase%+nextfree%+8+KL%(key%)+1)=REC%
  11978. !(keybase%+P%+Z%)=nextfree%
  11979. !keybase%=avail%
  11980.  key%=0 
  11981.  RU%+=1
  11982. delete(
  11983.  S$,key%)
  11984.  P%,A%,kl%,keybase%
  11985.  S$="" 
  11986.  null%(key%)=
  11987. keybase%=!keyanchor%(key%)
  11988. A%=!keybase%
  11989. "kl%=KL%(key%):val$=
  11990. type(key%)
  11991. search(S$,key%,2)
  11992.  P%<0 
  11993. softerror(S$+","+Index$(key%),1):S$="*Failed*":
  11994. neighbour(key%,P%,0)
  11995. neighbour(key%,P%,1)
  11996. '!(keybase%+L%+Z%)=!(keybase%+P%+Z%)
  11997.     Q%=P%
  11998. ZL%=4-Z%
  11999. P1%=!(keybase%+P%+ZL%)
  12000.  P1%>0 
  12001.   info$=$(keybase%+P1%+8)
  12002.   P%=-
  12003. search(info$,key%,0)
  12004.   !(keybase%+P%+Z%)=P1%
  12005.  !(keybase%+PR%+4)<=0 
  12006.  !(keybase%+PR%+4)=-SU%
  12007.  !(keybase%+SU%+0)<=0 
  12008.  !(keybase%+SU%+0)=-PR%
  12009. !(keybase%+Q%)=A%
  12010. !keybase%=Q%
  12011.  key%=0 
  12012.  RU%-=1
  12013. save_keys
  12014.  keyN%
  12015.  present%<>7 
  12016.  "Hourglass_On"
  12017. 5keybase%=!keyanchor%(0):keybase%!4=
  12018. ($Increment%)
  12019.  !keyanchor%(keyN%)>0
  12020. !  keybase%=!keyanchor%(keyN%)
  12021.  "SlidingHeap_DescribeBlock",slidingheapbase%,keyanchor%(keyN%) 
  12022.  ,,filelength%
  12023.  keyN%=0 
  12024.     index$=""
  12025.  index$="Indices."
  12026.  "OS_File",10,$database%+"."+index$+Index$(keyN%),&7F0,,keybase%,keybase%+filelength%
  12027.   keyN%+=1
  12028.  "Hourglass_Percentage",keyN%*100 
  12029.  (Keys%+1)
  12030.  "Hourglass_Off"
  12031. readsmarray(filehandle%,REC%)
  12032.  loop%
  12033. #filehandle%=REC%*Length%
  12034.  loop%=1 
  12035.  fields%
  12036.   F$(loop%)=
  12037. #filehandle%
  12038.  loop%
  12039. writesmarray(F,
  12040.  loop%,F$,L%
  12041. #F=R%*Length%
  12042.  loop%=1 
  12043.  fields%
  12044. !  F$=F$(loop%):L%=len%(loop%)
  12045. (F$)<=L% 
  12046. #F,F$ 
  12047. L%,"!")
  12048.  loop%
  12049.     R%+=1
  12050. check_save(T%)
  12051.  time%
  12052.  T%=0 
  12053.  "OS_ReadMonotonicTime" 
  12054.  time%
  12055.  (time% 
  12056.  T%)<10 
  12057.  buttonfield%(0,19)>0 
  12058.  wi%=mainW%:ic%=field%(buttonfield%(0,19)) 
  12059.  wi%=keypadW%:ic%=19
  12060.  autosave% 
  12061.     delay%=
  12062.  loop%=0 
  12063.       
  12064. invert(wi%,ic%)
  12065.       delay%+=50
  12066.       
  12067. >delay%
  12068.       
  12069.  1,-15,180,5
  12070.       
  12071. invert(wi%,ic%)
  12072.       delay%+=50
  12073.       
  12074. >delay%
  12075.  loop%
  12076. invert(wi%,ic%)
  12077. mouse(0,0,4,wi%,ic%)
  12078. invert(wi%,ic%)
  12079.  Calculations ---------------------------------------------------------
  12080. calc_link(T$,type%)
  12081.  ### Sets up calculation formula window & menu entry ###
  12082. $CalcFunc%=T$
  12083.  I%=1 
  12084.   T$=
  12085. )$CalcTitle%=T$:calclink%=Fieldnumber%
  12086. split_link(calclink%,real$,visible$)
  12087.  type% 
  12088.  6,7:$CalcForm%=Tag$(calclink%)+"="+visible$
  12089.   $CalcForm%=visible$
  12090. icon_bit(22,calcW%,2,off%)
  12091. deselect(calcW%,2)
  12092. calc_formula(S$)
  12093.  ### Parses calculation formula (S$) & builds calc$(I%) ###
  12094.  I%,P%,t$,s$,C$,time%,user%
  12095.  ic% 
  12096. close_window(wi%)
  12097. 1  C$=
  12098. ~(calclink%):
  12099.  calclink%<16 
  12100.  C$="0"+C$
  12101.  $CalcFunc%="Set base value" 
  12102.  S$="" 
  12103.  S$="0"
  12104. "    calc$(calclink%)=S$+"|"+S$
  12105.     calc$(0)="LOADED"
  12106.         
  12107. ,    P%=
  12108. S$,"="):S$=
  12109. S$,P%+1):visible$=S$
  12110.  I%=fields% 
  12111.       t$=Tag$(I%)
  12112.       
  12113.  t$<>"" 
  12114.         P%=0
  12115.         
  12116. $    '          user%=(
  12117. S$,"FNU",P%+1)>0)
  12118.           P%=
  12119. S$,t$,P%+1)
  12120.           
  12121.  P%>0 
  12122. "            
  12123.  chartype%(I%) 
  12124. a              
  12125.  3,6,46,47,54,56,57:
  12126.  user% 
  12127.  s$="$Rf%("+
  12128. (I%)+")" 
  12129.  s$="VAL($Rf%("+
  12130. (I%)+"))"
  12131. ?              
  12132.  8:s$="FNseconds($Rf%("+
  12133. (I%)+"),1)":time%=
  12134.               
  12135. +              
  12136.  chartype%(calclink%) 
  12137. L                
  12138.  user% 
  12139.  s$="$Rf%("+
  12140. (I%)+")" 
  12141.  s$="FNn("+
  12142. (I%)+")"
  12143. ,                
  12144.  7:s$="$Rf%("+
  12145. (I%)+")"
  12146.               
  12147.             
  12148. -            S$=
  12149. S$,P%-1)+s$+
  12150. S$,P%+
  12151. (t$))
  12152.             update$(I%)+=C$
  12153.           
  12154.         
  12155.  P%=0
  12156.       
  12157. /    
  12158. visible$,"TIME$")>0 
  12159.  update$(0)+=C$
  12160. @    
  12161.  time%=
  12162.  chartype%(calclink%)=7 
  12163.  S$="FNtime("+S$+")"
  12164. #    
  12165. (S$)+
  12166. (visible$)+2<256 
  12167. .      calc$(calclink%)="#"+S$+"#"+visible$
  12168.       calc$(0)="LOADED"
  12169. $ 9      
  12170. selected(calcW%,2) 
  12171. recalculate(calclink%)
  12172.       
  12173. softerror("",44)
  12174. $"        
  12175.   calclink%=0
  12176. asterisk(
  12177. $&*  
  12178.  (b% 
  12179.  %111)=4 
  12180. close_window(wi%)
  12181. recalculate(F%)
  12182.  F,I%,R%,k$,P%,real$,visible$,subtotal%,zero%,examined%
  12183. softerror(real$,73):
  12184. split_link(F%,real$,visible$)
  12185. confirm("Recalculate "+Tag$(F%)+"="+visible$+" for existing records?")=
  12186. $0%subtotal%=
  12187. count_recs(key%,zero%)
  12188.  "Hourglass_On"
  12189. $2*dbasehandle%=
  12190. ($database%+".Database")
  12191. neighbour(key%,top,1)
  12192.  P%<>top
  12193.   R%=
  12194. rec_no(k$,key%,P%)
  12195. $6#  
  12196. readsmarray(dbasehandle%,R%)
  12197.  I%=1 
  12198.  fields%
  12199.     $Rf%(I%)=F$(I%)
  12200.  chartype%(F%) 
  12201.     F=
  12202. (real$):F$=
  12203. $=+    
  12204.  fix%(F%)>0 
  12205. fix_point(F$,F%)
  12206.  7:F$=
  12207. (real$)
  12208. $@#  
  12209. (F$)<=len%(F%) 
  12210.  F$(F%)=F$
  12211. $A$  
  12212. writesmarray(dbasehandle%,R%)
  12213.   P%=
  12214. neighbour(key%,P%,1)
  12215.   examined%+=1
  12216. $D9  
  12217.  "Hourglass_Percentage",examined%*100 
  12218.  subtotal%
  12219.  "Hourglass_Off"
  12220. close_file(dbasehandle%)
  12221.  I%=1 
  12222.  fields%
  12223.   $Rf%(I%)=field$(I%)
  12224. display(key%,addr)
  12225. asterisk(
  12226. save_calcs
  12227.  calc$(0)="LOADED" 
  12228.   cl=
  12229. ($database%+".Calc")
  12230.  F%=1 
  12231.  fields%
  12232. #cl,calc$(F%)
  12233. close_file(cl)
  12234. sums(
  12235.  F$,F%,type%)
  12236.  F$<>"" 
  12237.  type% 
  12238.  8:V=
  12239. seconds(F$,1)
  12240.   Sum(F%,0)+=1
  12241.   Sum(F%,1)+=V
  12242.   Sum(F%,3)+=V*V
  12243. $d!  
  12244.  V>Sum(F%,4) 
  12245.  Sum(F%,4)=V
  12246. $e!  
  12247.  V<Sum(F%,5) 
  12248.  Sum(F%,5)=V
  12249. ctotals(flag%)
  12250.  F%,I%,J%,N%,R%,S%,base%,pos%,F$
  12251.  S$(),f%()
  12252.  S$(5),f%(5)
  12253. base%=!lineanchor%
  12254. $n3S$()="Items","Sum","Mean","St.Dev.","Max","Min"
  12255.  I%=1 
  12256. (Form$)-1 
  12257.   F%=
  12258. fnum(
  12259. Form$,I%,2))
  12260.   R%=calcrow%?F%
  12261.  chartype%(F%) 
  12262.  3,6,8,46,47,54,56,57:
  12263.  Sum(R%,0)>0 
  12264. $u'      Sum(R%,2)=Sum(R%,1)/Sum(R%,0)
  12265. $v6      Sum(R%,3)=
  12266. (Sum(R%,3)/Sum(R%,0)-Sum(R%,2)^2)
  12267. $w        
  12268. $x'    
  12269.  Sum(R%,5)=10^30 
  12270.  Sum(R%,5)=0
  12271.  J%=0 
  12272.   pos%=base%
  12273.  flag%>0 
  12274. $~>    N%=0:start%=1:F$=
  12275. Lmargin%-
  12276. (S$(J%))-1," ")+S$(J%)+" "
  12277.  N%=1:start%=3
  12278. &    L%=Tab%(1)-Lmargin%-
  12279. (spacer$)
  12280. N    
  12281.  L%>=7 
  12282.  F$=margin$+
  12283. tab(S$(J%),N%) 
  12284.  F$=margin$+
  12285. S$(J%),L%),N%)
  12286. heap_store(lineanchor%,LenLine%,0,pos%,0,F$)
  12287. (Form$)>2 
  12288.  start%=1 
  12289. $    
  12290.  I%=start% 
  12291. (Form$)-1 
  12292. &      F%=
  12293. fnum(
  12294. Form$,I%,2)):F$=""
  12295.       N%+=1
  12296.       
  12297.  chartype%(F%) 
  12298. #        
  12299.  3,6,8,46,47,54,56,57:
  12300.         R%=calcrow%?F%
  12301. Q        
  12302.  chartype%(F%)=8 
  12303.  result$=
  12304. time(Sum(R%,J%)) 
  12305.  result$=
  12306. (Sum(R%,J%))
  12307. T        
  12308. selected(pselectW%,R%*8+2+J%) 
  12309. justify(result$,N%,N%-1):f%(J%)=1
  12310.       
  12311. @      
  12312. heap_store(lineanchor%,LenLine%,0,pos%,0,
  12313. tab(F$,N%))
  12314. =    
  12315.  f%(J%)=1 
  12316. list_line(-1,lineanchor%,pos%-base%,32)
  12317. (f%())>0 
  12318. rule_off(45)
  12319. margin_warn
  12320.  f%,F%,R%,J%
  12321. fnum(
  12322. Form$,2))
  12323.  chartype%(F%) 
  12324.  3,6,8,46,47,54,56,57:
  12325.   R%=calcrow%?F%
  12326.  J%=0 
  12327. 0    
  12328. selected(pselectW%,R%*8+2+J%) 
  12329.  f%=F%
  12330.  f%>0 
  12331.  Lmargin%<9 
  12332. softerror(Tag$(f%),92):=-1
  12333. tab(F$,N%)
  12334. (F$)+
  12335. (spacer$)
  12336.  Tab%(N%)-Tab%(N%-1)-L%<=0 
  12337. =F$+spacer$
  12338. ,=F$+
  12339. Tab%(N%)-Tab%(N%-1)-L%," ")+spacer$
  12340. justify(f$,x%,x1%)
  12341. $L%=Tab%(x%)-Tab%(x1%)-
  12342. (spacer$)
  12343. (f$)>L% 
  12344.   f$=
  12345. f$,L%)
  12346. (f$)," ")+f$
  12347. f$)="." 
  12348.  f$=" "+
  12349. execute_script(f$)
  12350.  F,P%,name$,command$,finished%,firstquery%,state%
  12351. confirm(
  12352. msg("Err68,"+
  12353. leaf(f$))) 
  12354. selected(printW%,39) 
  12355.  reportdest$="File" 
  12356.  reportdest$="Window"
  12357.  Script file signature
  12358. junk$=
  12359. abort_script:
  12360.  finished%)
  12361.  "OS_Byte",229,0
  12362.   line$=
  12363.   space%=
  12364. line$," ")
  12365.  space%=0 
  12366.  command$=line$:params$="" 
  12367.  command$=
  12368. line$,space%-1):params$=
  12369. line$,space%+1):state%=(params$="ON")
  12370.  command$ 
  12371.  "!COMMENT":
  12372.  "!SCRIPT":
  12373.     ImpCom$=""
  12374.  params$="END" 
  12375.       finished%=
  12376. <      
  12377. execute_script($database%+".PrintRes."+params$)
  12378.         
  12379.  "!DELETE":
  12380.  present%=7 
  12381.       RecF%=
  12382. 0      
  12383.  params$="" 
  12384.  key$=
  12385.  key$=params$
  12386. 3      
  12387. select(searchW%,6):
  12388. deselect(searchW%,5)
  12389.        addr=
  12390. find(key$,0,0,
  12391.       
  12392.  RecF%=
  12393.         addr=
  12394. shift(0,0,0)
  12395. $        addr=
  12396. moveto(key%,top,1)
  12397.       
  12398.         
  12399.  "!INSERT":
  12400.  present%=7 
  12401. 0      subfile%=
  12402. (params$):top=8*subfile%+LH%
  12403.       
  12404. make_new_rec
  12405.       
  12406.  loop%=1 
  12407.  fields%
  12408. )        $Rf%(loop%)=
  12409. #F,len%(loop%))
  12410.       
  12411.       
  12412. write(fields%,key%)
  12413.       top=8*file%+LH%
  12414.       
  12415. asterisk(
  12416.         
  12417.  "!QUERY":
  12418.  params$<>"" 
  12419.       P%=
  12420. params$,",")
  12421. 5      $Query%=
  12422. params$,P%+1):name$=
  12423. params$,P%-1)
  12424. 0      f$=$database%+".PrintJobs."+
  12425. name$,10)
  12426.       Search$=
  12427. parse
  12428.       
  12429.  "Hourglass_On"
  12430.       
  12431.  reportdest$ 
  12432. #        
  12433.  "Window":TextName$=f$
  12434. &        
  12435.  "File":texthandle%=
  12436.         
  12437.  ImpCom$<>"" 
  12438.           
  12439. -            
  12440.  firstquery%=
  12441. :firstquery%=
  12442. '            
  12443. #texthandle%,ImpCom$
  12444.           
  12445.         
  12446.       
  12447.       
  12448. do_it(Search$,-1)
  12449.         
  12450.  "!CSV":
  12451.     P%=
  12452. params$,",")
  12453. 3    $Query%=
  12454. params$,P%+1):name$=
  12455. params$,P%-1)
  12456. .    f$=$database%+".PrintJobs."+
  12457. name$,10)
  12458. write_csv(f$)
  12459.  "!SELECTION":
  12460.  params$<>"" 
  12461. 3      filename$=$database%+".PrintRes."+params$
  12462. -      
  12463.  "OS_File",5,filename$ 
  12464.  ,,ftype%
  12465. #      ftype%=(ftype%>>8) 
  12466.  &FFF
  12467. 4      
  12468.  ftype%=&7F3 
  12469. load_selection(filename$)
  12470.       
  12471. clear_selection
  12472.         
  12473.  "!PRINTOPTS":
  12474.  params$<>"" 
  12475. 3      filename$=$database%+".PrintRes."+params$
  12476. -      
  12477.  "OS_File",5,filename$ 
  12478.  ,,ftype%
  12479. #      ftype%=(ftype%>>8) 
  12480.  &FFF
  12481. 9      
  12482.  ftype%=&7F5 
  12483. get_options(printW%,filename$)
  12484. D      
  12485. get_options(printW%,"<Pbase$Dir>.Resources.PrtOptions")
  12486.         
  12487. -    
  12488.  "!CASE":
  12489. set_icon(queryW%,1,state%)
  12490. 0    
  12491.  "!EXPAND":
  12492. set_icon(printW%,11,state%)
  12493. %    .    
  12494.  "!DATE":
  12495. set_icon(printW%,19,state%)
  12496. /    
  12497.  "!UPPER":
  12498. set_icon(printW%,12,state%)
  12499. 0    
  12500.  "!HEADER":
  12501. set_icon(printW%,47,state%)
  12502. 0    
  12503.  "!FOOTER":
  12504. set_icon(printW%,48,state%)
  12505. /    
  12506.  "!FIRST":
  12507. set_icon(printW%,10,state%)
  12508. 3    
  12509.  "!UNDERLINE":
  12510. set_icon(printW%,29,state%)
  12511. 0    
  12512.  "!SHRINK":
  12513. set_icon(printW%,40,state%)
  12514. 1    
  12515.  "!CONTROL":
  12516. set_icon(printW%,42,state%)
  12517. -    
  12518.  "!TITLE":$
  12519. text(printW%,18)=params$
  12520. ,    
  12521.  "!PAGE":$
  12522. text(printW%,16)=params$
  12523. 1    
  12524.  "!LINESPACE":$
  12525. text(printW%,17)=params$
  12526. /    
  12527.  "!LMARGIN":$
  12528. text(printW%,30)=params$
  12529. /    
  12530.  "!TMARGIN":$
  12531. text(printW%,32)=params$
  12532. .    
  12533.  "!SPACER":$
  12534. text(printW%,43)=params$
  12535. 0    
  12536.  "!COLWIDTH":$
  12537. text(printW%,45)=params$
  12538. 1    
  12539.  "!TEXTWIDTH":$
  12540. text(printW%,34)=params$
  12541.  "!HEADINGS":
  12542. u(params$) 
  12543. 7      
  12544.  "D":
  12545. select(printW%,2):
  12546. deselect(printW%,1)
  12547. 3      
  12548. select(printW%,1):
  12549. deselect(printW%,2)
  12550.         
  12551.  "!PITCH":
  12552. 3    
  12553. deselect(printW%,
  12554. selected_esg(printW%,2))
  12555. (params$) 
  12556. %!       
  12557. select(printW%,4)
  12558. %"!      
  12559. select(printW%,7)
  12560. %#!      
  12561. select(printW%,8)
  12562.       
  12563. select(printW%,6)
  12564. %%        
  12565.  "!FORMAT":
  12566. %'3    
  12567. deselect(printW%,
  12568. selected_esg(printW%,3))
  12569. %("    
  12570. icon_bit(22,printW%,15,
  12571. %)Q    P%=
  12572. params$," "):
  12573.  P%>0 
  12574.  cols$=
  12575. params$,P%+1):params$=
  12576. params$,P%-1))
  12577.  params$ 
  12578. %+*      
  12579.  "VERTICAL":
  12580. select(printW%,24)
  12581. %,'      
  12582.  "TABLE":
  12583. select(printW%,25)
  12584. %-"      $
  12585. text(printW%,15)=cols$
  12586. %.$      
  12587. icon_bit(22,printW%,15,
  12588. %/'      
  12589.  "LABEL":
  12590. select(printW%,26)
  12591.       
  12592. select(printW%,23)
  12593. %1        
  12594.  "!DESTINATION":
  12595. %33    
  12596. deselect(printW%,
  12597. selected_esg(printW%,4))
  12598.     params$=
  12599. u(params$)
  12600.  params$ 
  12601. %69      
  12602.  "FILE":
  12603. select(printW%,39):reportdest$="File"
  12604. %7?      
  12605.  "PRINTER":
  12606. select(printW%,41):reportdest$="Printer"
  12607.       
  12608. %92      
  12609. select(printW%,38):reportdest$="Window"
  12610. %:8      TextName$=$database%+".PrintJobs."+
  12611. query$,10)
  12612. %;        
  12613.  "!LABEL":
  12614.     params$+=","
  12615.  I%=1 
  12616.       P%=
  12617. params$,",")
  12618. %@4      par$=
  12619. params$,P%-1):params$=
  12620. params$,P%+1)
  12621.       
  12622.         
  12623. %C7        
  12624. deselect(labelW%,
  12625. selected_esg(labelW%,1))
  12626.         
  12627.  par$ 
  12628. %E&          
  12629.  "1":
  12630. select(labelW%,0)
  12631. %F&          
  12632.  "2":
  12633. select(labelW%,1)
  12634. %G"          
  12635. select(labelW%,2)
  12636.         
  12637. %I&        
  12638. text(labelW%,4)=par$
  12639. %J&        
  12640. text(labelW%,6)=par$
  12641. %K'        
  12642. text(labelW%,10)=par$
  12643. %L'        
  12644. text(labelW%,12)=par$
  12645. %M'        
  12646. text(labelW%,17)=par$
  12647. %N,        
  12648. set_icon(labelW%,11,(par$<>""))
  12649. %O:        
  12650. icon_bit(22,labelW%,12,
  12651. selected(labelW%,11))
  12652. %P5        
  12653. set_icon(labelW%,13,(
  12654. u(par$)="ON"))
  12655. %Q5        
  12656. set_icon(labelW%,16,(
  12657. u(par$)="ON"))
  12658.       
  12659.  "!IMPRESSION":
  12660.     P%=
  12661. params$," ")
  12662.  P%>0 
  12663. %W=      ImpCom$=
  12664. params$,P%-1):modifier$=
  12665. params$,P%+1))
  12666.       
  12667.  modifier$ 
  12668. %Y'        
  12669.  "NOT FIRST":firstquery%=
  12670.       
  12671.       
  12672.  ImpCom$=params$
  12673. %\        
  12674. %]        
  12675. softerror(command$,46)
  12676.     finished%=
  12677.  "Hourglass_Smash"
  12678. close_file(F)
  12679. abort_script
  12680. close_file(F)
  12681. softerror("",57)
  12682. wimp_error(
  12683.  "Impulse" handling -----------------------------------------------
  12684. Impulse_command_received(token%,params%,object%)
  12685. %s4param$=
  12686. getstr(params%):object$=
  12687. getstr(object%)
  12688.  object$="" 
  12689.  object$=
  12690. leaf($database%)
  12691.  token% 
  12692. %v@  
  12693.  ### GetPathname. Returns full pathname of object ###
  12694. leaf($database%) 
  12695.  object$:
  12696. %y<    
  12697.  "Impulse_SendMessage",&202,$database%,,,,,mytask%
  12698.  "No data":
  12699. %{D    
  12700.  "Impulse_SendMessage",&202,"No database open",,,,,mytask%
  12701. %}T    
  12702.  "Impulse_SendMessage",&202,"Current database is not "+object$,,,,,mytask%
  12703.  ### Selection. Returns maximum data length ###
  12704.   ClientSep$=
  12705. param$,1)
  12706. ?  ClientForm$=
  12707. find_fields(param$,ClientSep$,ClientLength%)
  12708. extend_named_sliding_block(transanchor%,ClientLength%+1)
  12709.  "Impulse_SendMessage",&202,
  12710. (ClientLength%),,,,,mytask%
  12711.  ### ParseQuery. Returns title generated by FNparse ###
  12712. )  $Query%=param$:ClientSearch$=
  12713. parse
  12714.  "Impulse_SendMessage",&202,Title$,,,,,mytask%
  12715.  ### GetRecord. Returns data specified in Selection according to criteria specified in ParseQuery ###
  12716. <  datalength%=
  12717. prepare_next_record(param$,!transanchor%)
  12718.  "Impulse_SendMessage",&202,"Ready to receive?",-1,,,transtag%,mytask%,Length%
  12719.  ### PutRecord ###
  12720.  "Impulse_SendMessage",&201,"GetRecord",,,,getrec%,mytask%
  12721.  ### ExpandCode ###
  12722.   P%=
  12723. param$," ")
  12724. .  code$=
  12725. param$,P%-1):table$=
  12726. param$,P%+1)
  12727.  "Impulse_SendMessage",&202,
  12728. expand(code$,table$,L%,SF$),,,,,mytask%
  12729.  7,8:
  12730.  ### GetField, GetExpanded ###
  12731.  params%<>-1 
  12732. D    datalength%=
  12733. prepare_next_field(token%,param$,!transanchor%)
  12734. \    
  12735.  "Impulse_SendMessage",&202,"Ready to receive?",-1,,,transtag%,mytask%,datalength%
  12736. :    
  12737.  ### Max. length for a Powerbase field is 246 ###
  12738.  ### NextMatch ###
  12739. move_on_and_continue(key%)
  12740. move_on_and_continue(key%)
  12741.  S$,J%
  12742. @ClientPtr%=
  12743. next_match(ClientPtr%,1,ClientSearch$,finished%)
  12744.  finished% 
  12745.  F$()="":
  12746.  J%=0 
  12747.   S$+=F$(KF%(key%,J%))+" "
  12748. text(mergeW%,11)=
  12749. S$,80):
  12750. redraw_icon(mergeW%,11)
  12751. Impulse_reply(replytag%,reply%)
  12752. abort_merge:
  12753. reply$=
  12754. getstr(reply%)
  12755.  replytag% 
  12756.  getrec%:
  12757.  ### Reply to GetRecord command. ###
  12758.  "Impulse_FetchData",!transanchor%,Length%,,,,,mytask%
  12759.  mergetag%:
  12760.  ### Merging application replies when all data in document merged ###
  12761. selected(mergeW%,5) 
  12762.  "Impulse_SendMessage",&201,":"+$mergewith%+"."+document$+" Print",,,,printtag%,mytask%
  12763.  printtag%:
  12764.  ### Merging application has printed the current document ###
  12765.  "OS_Byte",229,0
  12766. 2  mergenum%+=1:$
  12767. text(mergeW%,12)=
  12768. (mergenum%)
  12769. redraw_icon(mergeW%,12)
  12770. selected(mergeW%,5) 
  12771.  ClientPtr%<>top 
  12772. ,    ClientPtr%=
  12773. merge_next(ClientPtr%,1)
  12774. deselect(mergeW%,5)
  12775. abort_merge
  12776. close_file(dbasehandle%)
  12777. ClientPtr%=top
  12778. deselect(mergeW%,5)
  12779. close_it(mergeW%)
  12780. softerror("",27)
  12781. wimp_error(
  12782. Impulse_send(tag%,maxsize%)
  12783.  "Impulse_TransmitData",!transanchor%,datalength%,,,,,mytask%
  12784. datalength%=0
  12785. Impulse_receive(replytag%,expected%,received%)
  12786.  I%,F%,P%
  12787. transbuff%=!transanchor%
  12788. transbuff%?received%=13
  12789. data$=$transbuff%
  12790.  ### Acknowledge data received (get reason code 19 otherwise!) ###
  12791.  "Impulse_SendMessage",&202,,,,,replytag%,mytask%
  12792.  data$<>"" 
  12793.   P%=
  12794. data$,"#")
  12795.   REC%=
  12796. data$,P%-1))
  12797.   data$=
  12798. data$,P%+1)
  12799.  REC%=-1 
  12800.  REC%=RA%
  12801. read(fields%,REC%<>RA%,REC%,$database%)
  12802.  I%=1 
  12803. (ClientForm$) 
  12804. $    F%=
  12805. fnum(
  12806. ClientForm$,I%,2))
  12807. <    
  12808.  data$<>"" 
  12809.  $Rf%(F%)=
  12810. get_string(data$,ClientSep$)
  12811. write(fields%,key%)
  12812.  received%=0 
  12813.  "Impulse_SendMessage",&201,"GetRecord",,,,getrec%,mytask%
  12814. get_string(
  12815.  S$,sep$)
  12816.  P%,F$
  12817. S$,sep$)
  12818.  P%>0 
  12819.   F$=
  12820. S$,P%-1)
  12821.   S$=
  12822. S$,P%+1)
  12823. stripspaces(F$)
  12824. prepare_next_record(key$,transbuff%)
  12825.  ok%,I%,F%,P%
  12826.  dbasehandle%=0 
  12827. ,  dbasehandle%=
  12828. ($database%+".Database")
  12829. '  ClientPtr%=
  12830. neighbour(key%,top,1)
  12831. P%=transbuff%
  12832.  key$ 
  12833.  "***":
  12834. close_file(dbasehandle%)
  12835.   $P%=key$:P%+=
  12836. ($P%)+1
  12837.  ok%=
  12838.  ClientPtr%<>top
  12839. (    REC%=
  12840. rec_no(k$,key%,ClientPtr%)
  12841. '    
  12842. readsmarray(dbasehandle%,REC%)
  12843. (ClientSearch$)=
  12844. $      $P%=
  12845. (REC%)+"#":P%+=
  12846. ($P%)
  12847. %      
  12848.  I%=1 
  12849. (ClientForm$) 
  12850. (        F%=
  12851. fnum(
  12852. ClientForm$,I%,2))
  12853. ,        $P%=F$(F%)+ClientSep$:P%+=
  12854. ($P%)
  12855.       
  12856.       $P%+=ClientSep$:P%+=1
  12857.       ok%=
  12858.         
  12859. 0    ClientPtr%=
  12860. neighbour(key%,ClientPtr%,1)
  12861.  P%=transbuff% 
  12862. close_file(dbasehandle%)
  12863. "  val$=
  12864. type(key%):kl%=
  12865. (key$)
  12866. &    %  ClientPtr%=
  12867. search(key$,key%,1)
  12868.  ClientPtr%>=0 
  12869. (    REC%=
  12870. rec_no(k$,key%,ClientPtr%)
  12871. '    
  12872. readsmarray(dbasehandle%,REC%)
  12873. "    $P%=
  12874. (REC%)+"#":P%+=
  12875. ($P%)
  12876. #    
  12877.  I%=1 
  12878. (ClientForm$) 
  12879. &      F%=
  12880. fnum(
  12881. ClientForm$,I%,2))
  12882. *      $P%=F$(F%)+ClientSep$:P%+=
  12883. ($P%)
  12884.     $P%+=ClientSep$:P%+=1
  12885. =P%-transbuff%
  12886. prepare_next_field(method%,S$,transbuff%)
  12887.  L%,F%,P%,len%,T$,F$,V%,R%,b$,k$,SF$
  12888.  token% 
  12889.  ### GetField ###
  12890. &  F%=
  12891. field(S$,
  12892. ):V%=chartype%(F%)
  12893. C    
  12894.  0,1,2,3,4,5,6,7,8,46,47,48,49,50,51,52,53,54,55,56,57,58:
  12895.     L%=
  12896. (F$(F%))
  12897. D    
  12898. extend_named_sliding_block(transanchor%,(L%+4) 
  12899.  &FFFFFFFC)
  12900. &      transbuff%=!transanchor%
  12901. &!*    $transbuff%=F$(F%):transbuff%?L%=0
  12902.  36,39:
  12903. &#&    R%=
  12904. rec_no(k$,key%,ClientPtr%)
  12905. &$/    L%=
  12906. blob_path(
  12907. ,$database%,R%,F%,V%,b$)
  12908.  L%>0 
  12909. &&F      
  12910. extend_named_sliding_block(transanchor%,(L%+4) 
  12911.  &FFFFFFFC)
  12912. &'"      transbuff%=!transanchor%
  12913. &((      
  12914.  "OS_File",255,b$,transbuff%
  12915.       
  12916.  L%=1
  12917. &*7      
  12918. extend_named_sliding_block(transanchor%,256)
  12919. &+"      transbuff%=!transanchor%
  12920.       ?transbuff%=0
  12921. &-        
  12922.     transbuff%?L%=0
  12923.  ### GetExpanded ###
  12924. &1+  P%=
  12925. S$," "):T$=
  12926. S$,P%+1):S$=
  12927. S$,P%-1)
  12928. &22  F%=
  12929. field(S$,
  12930. ):F$=
  12931. expand(F$(F%),T$,L%,SF$)
  12932. &34  
  12933. extend_named_sliding_block(transanchor%,L%+1)
  12934.   transbuff%=!transanchor%
  12935. &56  $transbuff%=F$:L%=
  12936. ($transbuff%):transbuff%?L%=0
  12937. len%=(L%+4) 
  12938.  &FFFFFFFC
  12939. &8    =len%
  12940. start_merge
  12941. Imp_wait%=
  12942. text(mergeW%,1)=document$
  12943. ClientPtr%=top
  12944. $Query%=""
  12945. position_window(mergeW%,0,0,0,0,0,0)
  12946. set_caret(queryW%,0)
  12947. merge_next(P%,D%)
  12948.  S$,J%
  12949. D%=(D%+1) 
  12950. &F1P%=
  12951. next_match(P%,D%,ClientSearch$,finished%)
  12952.  finished% 
  12953. selected(mergeW%,5) 
  12954.  J%=0 
  12955. &I     S$+=F$(KF%(key%,J%))+" "
  12956. &K   $
  12957. text(mergeW%,11)=
  12958. S$,80)
  12959. redraw_icon(mergeW%,11)
  12960. &M_  
  12961.  "Impulse_SendMessage",&201,":"+$mergewith%+"."+document$+" Merge",,,,mergetag%,mytask%
  12962.  End of "Impulse" handling -------------------------------------------
  12963.  Import/Export CSV files ---------------------------------------------
  12964. start_import(type$,wi%)
  12965.  OK%,T%,filename$
  12966.  "Wimp_GetPointerInfo",,block%:x%=!block%:y%=block%!4
  12967.  present% 
  12968. &Z-  
  12969.  fields%=0 
  12970.  OK%=
  12971. softerror("",69)
  12972. &[/  
  12973.  Modify% 
  12974.  OK%=
  12975. softerror("",14)
  12976. softerror("",69)
  12977.  T%=0 
  12978.  LastTable%
  12979. &_)  
  12980.  wi%=tableW%(T%) 
  12981.  Tablenumber%=T%
  12982.  OK% 
  12983.  wi% 
  12984. &c\    
  12985. select(csvW%,1):
  12986. select(csvW%,4):
  12987. icon_bit(22,csvW%,4,
  12988. ):csvfunc$="ImportMain"
  12989. &d&    
  12990.  mainW%:csvfunc$="ImportMain"
  12991. &e6    
  12992.  tableW%(Tablenumber%):csvfunc$="ImportTable"
  12993. &g   filename$=$
  12994. text(csvW%,13)
  12995. icon_bit(22,csvW%,0,
  12996. &i(  $CSVTitle%="Import "+type$+" file"
  12997. text(csvW%,9)="Import"
  12998.  wi%=mainW% 
  12999. &l7    
  13000. position_window(csvW%,x%-350,y%-260,0,520,0,0)
  13001. &m-    
  13002. position_window(csvW%,0,0,0,0,0,0)
  13003. auto_csv(on%)
  13004.  on% 
  13005.  present%=7 
  13006. &v9    autocsvhandle%=
  13007. ($database%+".PrintJobs.NewData")
  13008. &w"    
  13009. select_range(1,fields%,
  13010.     csvform$=printorder$
  13011. clear_selection
  13012.  autocsvhandle%>0 
  13013. &}#    
  13014. close_file(autocsvhandle%)
  13015. &~<    
  13016.  "OS_File",18,$database%+".PrintJobs.NewData",&dfe
  13017. write_csv(Filename$)
  13018.  writingcsv% 
  13019.  printorder$<>"" 
  13020.  Form$=printorder$ 
  13021. softerror("",34):
  13022.  P%,rec%,examined%,subtotal%
  13023. end_csv:
  13024. csvhandle%=
  13025. (Filename$)
  13026. selected(csvW%,1) 
  13027. csv_head
  13028. *dbasehandle%=
  13029. ($database%+".Database")
  13030. Search$=
  13031. parse
  13032.  "Hourglass_On"
  13033.  usekey%=-1 
  13034. selected(savesubW%,6)=
  13035.   P%=
  13036. neighbour(key%,top,1)
  13037. scan_file("P%<>top",key%,file%,3)
  13038. #  P%=
  13039. search(useval$,usekey%,1)
  13040.  P%>=0 
  13041.  k$=useval$:
  13042. scan_file("P%<>top AND k$=useval$",usekey%,file%,3)
  13043.  "Hourglass_Off"
  13044. close_file(csvhandle%)
  13045. close_file(dbasehandle%)
  13046.  sep$="," 
  13047.  type%=&dfe 
  13048.  type%=&fff
  13049.  "OS_File",18,Filename$,type%
  13050. writingcsv%=
  13051. close_it(savesubW%)
  13052. end_csv
  13053.  "Hourglass_Smash"
  13054. close_file(csvhandle%)
  13055. close_file(dbasehandle%)
  13056. close_file(F)
  13057.  "OS_File",18,Filename$,&dfe
  13058. writingcsv%=
  13059. softerror("",41)
  13060. wimp_error(
  13061. csv_head
  13062.  I%,F%,f$,H$,Head$,N%
  13063.     I%=-1
  13064. (Form$)-1
  13065. (  I%+=2:F%=
  13066. fnum(
  13067. Form$,I%,2)):N%+=1
  13068. selected(printW%,2) 
  13069.  Head$=$
  13070. text(mainW%,(desc%(F%))) 
  13071.  Head$=Tag$(F%)
  13072. selected(csvW%,4) 
  13073.  Head$=
  13074. (len%(F%))+"
  13075. "+Head$+"
  13076. (chartype%(F%))
  13077.  chartype%(F%)<>3 
  13078.  chartype%(F%)<>6 
  13079. selected(csvW%,0) 
  13080.  Head$=""""+Head$+""""
  13081.  N%>1 
  13082.  Head$=sep$+Head$
  13083. #csvhandle%,Head$;
  13084. #csvhandle%,term$;
  13085. write_csv_rec(R%,Form$,handle%)
  13086.  I%,F%,f$,F$,L%,N%,filename$,len%,base%,SF$
  13087. selected(csvW%,3) 
  13088.   F$=
  13089. key2(0,1)
  13090. selected(csvW%,0) 
  13091.  F$=""""+F$+""""
  13092. #handle%,F$+sep$;
  13093. selected(csvW%,22) 
  13094. #handle%,
  13095. (REC%)+sep$;
  13096. I%=-1:L%=
  13097. (Form$)-1
  13098.  I%<L%
  13099. "  I%+=2:F%=
  13100. fnum(
  13101. Form$,I%,2))
  13102.  chartype%(F%) 
  13103.  36,39:
  13104. ,    len%=
  13105. load_blob($database%,R%,F%,36)
  13106. '    
  13107.  len%>0 
  13108. selected(csvW%,2) 
  13109. (      N%+=1:
  13110.  N%>1 
  13111. #handle%,sep$;
  13112. 0      
  13113. selected(csvW%,0) 
  13114. #handle%,"""";
  13115. %      
  13116. blob_to_file(handle%,len%)
  13117. 0      
  13118. selected(csvW%,0) 
  13119. #handle%,"""";
  13120.         
  13121.  3,6,46,47,54,56,57:
  13122.     F$=F$(F%):N%+=1
  13123. '    
  13124.  F$<>"" 
  13125. selected(csvW%,2) 
  13126.       
  13127.  N%>1 
  13128.  F$=sep$+F$
  13129.       
  13130. #handle%,F$;
  13131.         
  13132.  41,42,43,44,45:
  13133.       F$=F$(F%):N%+=1
  13134.       Z%=
  13135. no_yes(F%,n$,y$)
  13136. "      
  13137.  F$=" " 
  13138.  F$=y$ 
  13139.  F$=n$
  13140. 0      
  13141. selected(csvW%,0) 
  13142.  F$=""""+F$+""""
  13143.       
  13144.  N%>1 
  13145.  F$=sep$+F$
  13146.       
  13147. #handle%,F$;
  13148. !    
  13149. selected(printW%,11) 
  13150. /      F$=
  13151. expand(F$(F%),link$(F%),Len%,SF$)
  13152.       
  13153.  F$=F$(F%)
  13154.         
  13155.     N%+=1
  13156. '    
  13157.  F$<>"" 
  13158. selected(csvW%,2) 
  13159. 0      
  13160. selected(csvW%,0) 
  13161.  F$=""""+F$+""""
  13162.       
  13163.  N%>1 
  13164.  F$=sep$+F$
  13165.       
  13166. #handle%,F$;
  13167.         
  13168. #handle%,term$;
  13169. convert_csv(f$)
  13170.  k$,B%,J%,fld%,csvhandle%,toobighandle%,S$,sep%,sep2%,term%,term2%,F$,avail%,nextfree%,keybase%,base%,base2%,show%,done%
  13171. 3toobighandle%=
  13172. ($database%+".PrintJobs.TooBig")
  13173. stop_reading:
  13174. size%=&100:inc%=size%
  13175. extend_named_sliding_block(tempanchor%,size%)
  13176. :sep%=
  13177. (sep$):
  13178. (sep$)=2 
  13179.  sep2%=
  13180. sep$)) 
  13181.  sep2%=255
  13182. @term%=
  13183. (term$):
  13184. (term$)=2 
  13185.  term2%=
  13186. term$)) 
  13187.  term2%=255
  13188. csvhandle%=
  13189.  present%=0 
  13190. csv_to_dbase(f$)
  13191. Form$=
  13192. csv_importform
  13193.  "Hourglass_On"
  13194. selected(csvW%,22):
  13195. read_bytes
  13196.     REC%=
  13197. ($base%)
  13198. (    
  13199. read(fields%,
  13200. ,REC%,$database%)
  13201. selected(csvW%,3):
  13202. read_bytes
  13203. ,    addr=
  13204. find(
  13205. $base%,KL%(key%)),0,1,
  13206.  addr>0 
  13207. $      REC%=
  13208. rec_no(k$,key%,addr)
  13209. *      
  13210. read(fields%,
  13211. ,REC%,$database%)
  13212.       
  13213. make_new_rec
  13214.         
  13215. make_new_rec
  13216.   endline%=
  13217. :J%=-1
  13218. (Form$)-2 
  13219.  endline%=
  13220. '    &    J%+=2:fld%=
  13221. fnum(
  13222. Form$,J%,2))
  13223. !    
  13224. transfer_csv_field(fld%)
  13225.  fld%<=fields% 
  13226.  endline% 
  13227. next_csv_rec
  13228. write(fields%,key%)
  13229. selected(csvW%,11) 
  13230. redraw(mainW%)
  13231.  "Hourglass_Percentage",
  13232. #csvhandle%*100 
  13233. #csvhandle%
  13234.  "OS_Byte",229,0
  13235. #csvhandle%
  13236.  "Hourglass_Off"
  13237. close_file(csvhandle%)
  13238. close_file(toobighandle%)
  13239. scrap_sliding_block(tempanchor%)
  13240.  "OS_File",18,$database%+".PrintJobs.TooBig",&fff
  13241. addr=
  13242. moveto(key%,top,1)
  13243. clear_selection
  13244. asterisk(
  13245. write_log(-1,"CSV data imported from "+f$)
  13246. make_new_rec
  13247. /keybase%=!keyanchor%(0):nextfree%=!keybase%
  13248.  !(keybase%+nextfree%)<=0 
  13249.   incr%=
  13250. ($Increment%)
  13251.  incr%>0 
  13252. '##    
  13253. change_length(RA%+incr%,
  13254. '$#    
  13255.  moan_err%,
  13256. msg("Err66")
  13257. '')REC%=!(keybase%+nextfree%+8+KL%(0)+1)
  13258. read(fields%,
  13259. ,RA%,$database%)
  13260. transfer_csv_field(
  13261.  fld%)
  13262.  chartype%(fld%) 
  13263.  36,39:
  13264. read_bytes
  13265.  ptr%>0 
  13266. '03    Z%=
  13267. blob_path(
  13268. ,$database%,REC%,fld%,36,F$)
  13269. '1$    Start%=base%:End%=base%+ptr%
  13270. '2"    
  13271. save(F$,&fff,Start%,End%)
  13272. selected(csvW%,11) 
  13273.       
  13274.  chartype%(fld%) 
  13275. '5<        
  13276. set_blob_sprite(REC%,fld%,chartype%(fld%))
  13277. '6'        
  13278. show_text_block(fld%)
  13279.       
  13280. '8        
  13281.  41,42,43,44,45:
  13282. ';%  
  13283. read_bytes:c$=
  13284. pos_neg($base%)
  13285. '=9    
  13286.  " ":$Rf%(fld%)=" ":
  13287. select(mainW%,field%(fld%))
  13288. '>9    
  13289.  "":$Rf%(fld%)="":
  13290. deselect(mainW%,field%(fld%))
  13291.  "@":
  13292. #toobighandle%,"Rec."+
  13293. (REC%)+",Fld."+
  13294. (fld%)+","+$base%+" unsuitable data for check-box":$Rf%(fld%)="":
  13295. deselect(mainW%,field%(fld%))
  13296. 'AA  
  13297.  0,1,2,3,4,5,6,7,8,46,47,48,49,50,51,52,53,54,55,56,57,58:
  13298.  len%(fld%)>0 
  13299. read_bytes
  13300. 'D;    
  13301. selected(csvW%,16) 
  13302.  $base%=
  13303. stripspaces($base%)
  13304.       
  13305.  ptr%<=len%(fld%):
  13306. 'G       
  13307.  chartype%(fld%)=47 
  13308. 'HH        
  13309. selected(csvW%,23) 
  13310.  $Rf%(fld%)=$base%:dontincrement%=
  13311.         
  13312.  $Rf%(fld%)=$base%
  13313.       
  13314.       
  13315.  ptr%<247:
  13316. 'LC      
  13317. #toobighandle%,"Rec."+
  13318. (REC%)+",Fld."+
  13319. (fld%)+","+$base%
  13320.       $Rf%(fld%)="@"
  13321.       
  13322.       
  13323. #toobighandle%,"Rec."+
  13324. (REC%+1)+",Fld."+
  13325. (fld%)+" is more than 246 characters long. Data not saved. External field suggested."
  13326.       $Rf%(fld%)="@"
  13327. 'Q        
  13328.  fld%+=1
  13329. 'S8    
  13330.  ### Zero-length field is probably just a label
  13331. :fld%+=1
  13332. 'VF  
  13333.  ### Can't put CSV data into Button, Sprite or Draw fields! ###
  13334. read_bytes
  13335.  end$,flag%,B%,nq%
  13336. base%=!tempanchor%:ptr%=-1
  13337. #csvhandle%
  13338.  B%=34 
  13339.   flag%=
  13340. :nq%=1
  13341. '`c  end$="(base%?(ptr%-1)=34 AND (nq% MOD 2)=0) AND (B%=sep% OR B%=term% OR EOF#csvhandle%=TRUE)"
  13342. 'b!  
  13343. #csvhandle%=
  13344. #csvhandle%-1
  13345. 'c7  end$="B%=sep% OR B%=term% OR EOF#csvhandle%=TRUE"
  13346. 'f+  B%=
  13347. #csvhandle%:ptr%+=1:base%?ptr%=B%
  13348.  B%=34 
  13349.  nq%+=1
  13350. 'hO  
  13351.  ptr%=size% 
  13352.  size%+=inc%:
  13353. extend_named_sliding_block(tempanchor%,size%)
  13354. (end$)
  13355.  flag% 
  13356.  ptr%-=1
  13357. base%?ptr%=13
  13358.  sep%:
  13359. skip_sep
  13360.  term%:
  13361. skip_term
  13362. next_csv_rec
  13363.   B%=
  13364. #csvhandle%
  13365.  B%=term%
  13366. skip_term
  13367. skip_sep
  13368.  sep2%<>255 
  13369.   B%=
  13370. #csvhandle%
  13371. '|/  
  13372.  B%<>sep2% 
  13373. #csvhandle%=
  13374. #csvhandle%-1
  13375. skip_term
  13376.  term2%<>255 
  13377.   B%=
  13378. #csvhandle%
  13379.  B%<>term2% 
  13380. #csvhandle%=
  13381. #csvhandle%-1 
  13382.  endline%=
  13383.  endline%=
  13384. stop_reading
  13385.  "Hourglass_Off"
  13386. close_file(csvhandle%):
  13387. close_file(toobighandle%)
  13388.  "OS_File",18,$database%+".PrintJobs.TooBig",&fff
  13389. scrap_sliding_block(tempanchor%)
  13390.  =17 
  13391. softerror("",74)
  13392. wimp_error(
  13393.  present%=7 
  13394.   addr=
  13395. moveto(key%,top,1)
  13396. clear_selection
  13397. csv_importform
  13398.  F%,f$,F$
  13399. endline%=
  13400. selected(csvW%,1):
  13401.  ### Use header record to build form ###
  13402. read_bytes
  13403.     F%=
  13404. field($base%,
  13405. 2    
  13406.  F%=0 
  13407.  moan_err%,
  13408. msg("Err87,"+$base%)
  13409.     f$=
  13410. ~(F%)
  13411. (f$)=1 
  13412.  f$="0"+f$
  13413.     F$+=f$
  13414. "    
  13415. invert(mainW%,field%(F%))
  13416.  endline%
  13417.  printorder$<>"":
  13418.  ### Build form from highlighted fields, as in printing ###
  13419.   F$=printorder$
  13420.  ### Assume entry into all fields, beginning with first ###
  13421.  F%=1 
  13422.  fields%
  13423.     f$=
  13424. ~(F%)
  13425. (f$)=1 
  13426.  f$="0"+f$
  13427.     F$+=f$
  13428. csv_to_dbase(f$)
  13429.  F%,P%,Q%,FH%,S$,readpos%
  13430. read_bytes:S$=$base%:
  13431. #csvhandle%=0
  13432. ")=0 
  13433.  moan_err%,
  13434. msg("Err89")
  13435. leaf$=
  13436. leaf(f$):csvconv%=
  13437.  $database%="No data" 
  13438.  $database%=dbasepath$+".!"+leaf$
  13439. save($database%,0,0,0)
  13440. fields%=0:endline%=
  13441.   fields%+=1
  13442. read_bytes:S$=$base%
  13443. "  P%=
  13444. "):Q%=
  13445. ",P%+1)
  13446. %  Tag$(fields%)=
  13447. S$,P%+1,Q%-P%-1)
  13448.    len%(fields%)=
  13449. S$,P%-1))
  13450. %  chartype%(fields%)=
  13451. S$,Q%+1))
  13452.  endline%
  13453. scrap_sliding_block(tempanchor%)
  13454. ($database%+".Form")
  13455. #FH%,fields%
  13456.  F%=1 
  13457.  fields%
  13458.   xd%=16:xf%=96
  13459.   yd%=-(F%*52):yf%=yd%
  13460. #FH%,Tag$(F%),Tag$(F%),xd%,yd%,xf%,yf%,len%(F%),chartype%(F%),0,0
  13461. close_file(FH%)
  13462.  "OS_File",18,$database%+".Form",&7f2
  13463. fields%=0:Fieldnumber%=0
  13464. fields%=
  13465. get_form(Fptr%)
  13466. default_key
  13467. readpos%=
  13468. #csvhandle%
  13469. no_of_recs
  13470. defaults($database%,RA%,0)
  13471. save_keys
  13472. deselect(csvW%,1)
  13473. create_named_sliding_block(tempanchor%,size%)
  13474. csvhandle%=
  13475. #csvhandle%=readpos%
  13476. no_of_recs
  13477.  N%,B%
  13478. #csvhandle%
  13479.  B%=term% 
  13480. #csvhandle%
  13481.   N%+=1
  13482.  "Hourglass_Percentage",
  13483. #csvhandle%*100 
  13484. #csvhandle%
  13485. #csvhandle%
  13486.  --- SLIDING HEAP 2.00 PROCEDURES
  13487.  requires SlidingHeap 2.00
  13488.  module and PROCs
  13489.  Steven Haslam 1992
  13490. _heap_slotsize
  13491.  "Wimp_SlotSize",-1,-1 
  13492. _heap_numtostr(d%,n%)=
  13493. d%,"0")+
  13494. ~n%,d%)
  13495. _heap_snumtostr(d%,n%)=
  13496. d%," ")+
  13497. n%,d%)
  13498. heapsinfo
  13499.  "OS_Heap",1,fixedheapbase% 
  13500.  ,,bigbloc%,totfree%
  13501.  "Fixed heap"
  13502.  "----- ----"
  13503.  "Heap base    : &";
  13504. _heap_numtostr(8,fixedheapbase%)
  13505.  "Heap size    : ";
  13506. _heap_bytes2(fixedheapsize%)
  13507.  "Largest free : ";
  13508. _heap_bytes2(bigbloc%)
  13509.  "Total free   : ";
  13510. _heap_bytes2(totfree%)
  13511.  "Sliding heap"
  13512.  "------- ----"
  13513.  "SlidingHeap_HeapInfo",slidingheapbase%
  13514. _heap_pageup(n%)
  13515.  "OS_ReadMemMapInfo" 
  13516. =(n%+R0%-1) 
  13517.  (R0%-1)
  13518. initheaps(heapsize%,slidingblocks%)
  13519. fixedheapsize%=heapsize%
  13520. Lheap_trigger%=
  13521. _heap_pageup(
  13522. +fixedheapsize%+20+20*slidingblocks%-&8000)
  13523. setslotsize(heap_trigger%)
  13524. _heap_slotsize<heap_trigger% 
  13525.  130,"Unable to initialise heap"
  13526. fixedheapbase%=
  13527. %slidingheapbase%=
  13528. +fixedheapsize%
  13529.  "OS_Heap",0,fixedheapbase%,,fixedheapsize%
  13530.  "SlidingHeap_Create",slidingheapbase%,2,slidingblocks%
  13531.  "SlidingHeap_VerifyHeap",slidingheapbase%
  13532. _heap_nextfree
  13533.  nextfree%
  13534.  "SlidingHeap_NextFree",slidingheapbase% 
  13535.  nextfree%
  13536. =nextfree%
  13537. destroyheaps
  13538. setslotsize(
  13539. -&8000)
  13540. _heap_wordup(x%)=(x%+3) 
  13541. create_anchor(name$)
  13542.  space%
  13543.  space% 4+
  13544. name$+1
  13545. !space%=0
  13546. $(space%+4)=name$
  13547. =space%
  13548. create_named_sliding_block(anchor%,size%)
  13549.  trysize%
  13550. size%=
  13551. _heap_wordup(size%)
  13552. ('7trysize%=
  13553. _heap_pageup(
  13554. _heap_nextfree+size%-&7FF4)
  13555.  trysize%>heap_trigger% 
  13556. setslotsize(trysize%)
  13557. (*"  
  13558. _heap_slotsize<trysize% 
  13559. (+#    
  13560. setslotsize(heap_trigger%)
  13561. (,D    
  13562.  131,"Not enough room to create block """+$(anchor%+4)+""""
  13563. (-        
  13564.     heap_trigger%=trysize%
  13565.  "SlidingHeap_NewBlock",slidingheapbase%,anchor%,size%,anchor%+4
  13566.  "SlidingHeap_VerifyHeap",slidingheapbase%
  13567. scrap_sliding_block(anchor%)
  13568.  !anchor%=0 
  13569.  "SlidingHeap_ScrapBlock",slidingheapbase%,anchor%
  13570. (81trysize%=
  13571. _heap_pageup(
  13572. _heap_nextfree-&7FFC)
  13573.  trysize%<>heap_trigger% 
  13574. setslotsize(trysize%)
  13575.   heap_trigger%=trysize%
  13576. !anchor%=0
  13577.  "SlidingHeap_VerifyHeap",slidingheapbase%
  13578. setslotsize(newsize%)
  13579.  "Wimp_SlotSize",newsize%,-1
  13580. extend_named_sliding_block(anchor%,newsize%)
  13581.  !anchor%=0 
  13582. create_named_sliding_block(anchor%,newsize%):
  13583.  !anchor%>
  13584. _heap_nextfree 
  13585.  129,"Block beyond heap limits"
  13586. (H$newsize%=
  13587. _heap_wordup(newsize%)
  13588.  "SlidingHeap_DescribeBlock",slidingheapbase%,anchor% 
  13589.  ,,oldsize%
  13590. larger%=newsize%>oldsize%
  13591.  larger% 
  13592. (LG  trysize%=
  13593. _heap_pageup(
  13594. _heap_nextfree+(newsize%-oldsize%)-&7FFC)
  13595. (M   
  13596.  trysize%>heap_trigger% 
  13597. setslotsize(trysize%)
  13598. (O$    
  13599. _heap_slotsize<trysize% 
  13600. (P%      
  13601. setslotsize(heap_trigger%)
  13602. (Q=      
  13603.  132,"Not enough room to extend block #"+
  13604. ~anchor%
  13605.       
  13606. (S       heap_trigger%=trysize%
  13607. (T        
  13608.  "SlidingHeap_ExtendBlock",slidingheapbase%,anchor%,newsize%
  13609. (X1trysize%=
  13610. _heap_pageup(
  13611. _heap_nextfree-&7FFC)
  13612.  trysize%<>heap_trigger% 
  13613. setslotsize(trysize%)
  13614.    heap_trigger%=trysize%
  13615.  "SlidingHeap_VerifyHeap",slidingheapbase%
  13616. _heap_bytes(b%)
  13617.  end%
  13618.  "OS_ConvertFixedFileSize",b%,block%,block%+&100 
  13619.  ,end%
  13620. ?end%=13
  13621. =$block%
  13622. _heap_bytes2(b%)
  13623.  end%
  13624.  "OS_ConvertFileSize",b%,block%,block%+&100 
  13625.  ,end%
  13626. ?end%=13
  13627. =$block%
  13628. create_fixed_block(size%)
  13629.  pointer%,flag%
  13630.  "XOS_Heap",2,fixedheapbase%,,size% 
  13631.  ,,pointer%;flag%
  13632.  flag% 
  13633. extendfixedheap
  13634.  "XOS_Heap",2,fixedheapbase%,,size% 
  13635.  ,,pointer%;flag%
  13636. =pointer%
  13637. extendfixedheap
  13638.  nshb%,extend%,trysize%
  13639.  "OS_ReadMemMapInfo" 
  13640.  extend%
  13641. (x$trysize%=
  13642. _heap_slotsize+extend%
  13643. setslotsize(trysize%)
  13644. _heap_slotsize<trysize% 
  13645.  255,"No room to extend fixed heap"
  13646. ({"nshb%=slidingheapbase%+extend%
  13647.  "SlidingHeap_ShiftHeap",slidingheapbase%,nshb%
  13648.  "OS_Heap",5,fixedheapbase%,,extend%
  13649. fixedheapsize%+=extend%
  13650. slidingheapbase%=nshb%
  13651.  "SlidingHeap_VerifyHeap",slidingheapbase%
  13652. memory_usage
  13653.  F,R,f$,S$,P%
  13654. f$=$database%+".MemoryUsed"
  13655. #F,"Database: "+
  13656. leaf($database%)+" ("+
  13657. $+")"
  13658. #F,"(Record has "+
  13659. (fields%)+" fields and is "+
  13660. (Length%)+" bytes long)"
  13661. N%=((
  13662. )+1024) 
  13663.  1024
  13664. #F,"Program size: "+
  13665. (N%)+"K"
  13666. N%=((
  13667. P)+1024) 
  13668.  1024
  13669. #F,"Basic variables: "+
  13670. (N%)+"K"
  13671. N%=((
  13672. )+1024) 
  13673.  1024
  13674. ("<Pbase$Dir>.!Run")
  13675.   S$=
  13676. S$,8)="WimpSlot"
  13677. close_file(R)
  13678. S$,"K")-3
  13679. #F,"Program + variables: "+
  13680. (N%)+"K (Wimpslot = "+
  13681. S$,P%,4)+")"
  13682. @A%=indirectionmem% 
  13683.  1024:N%=((buff%-buffbase%)+1024) 
  13684.  1024
  13685. IM%=endbuff%-buff%:
  13686.  M%<1024 
  13687. (M%)+" bytes" 
  13688.  1024)+"K"
  13689. #F,"Icon indirection: "+
  13690. (A%)+"K allocated, "+M$+" left"
  13691. ;A%=menumem% 
  13692.  1024:N%=((menu_ptr%-menblk%)+1024) 
  13693.  1024
  13694. MM%=men_end%-menu_ptr%:
  13695.  M%<1024 
  13696. (M%)+" bytes" 
  13697.  1024)+"K"
  13698. #F,"Menus: "+
  13699. (A%)+"K allocated, "+M$+" left"
  13700. close_file(F)
  13701.  "OS_File",18,f$,&fff
  13702. debug(S$)
  13703. wimp_error(
  13704. ,254,0,S$)
  13705.